Python 입력에 대한 편집 기본값을 표시 할 수 있습니까?
파이썬이 다음과 같은 입력을 받아 들일 수 있습니까?
폴더 이름 : 다운로드
그러나 사용자가 "다운로드"를 입력하는 대신 이미 초기 값으로 있습니다. 사용자가 "다운로드"로 편집하려면 's'를 추가하고 Enter를 누르기 만하면됩니다.
일반 입력 명령 사용 :
folder=input('Folder name: ')
내가 얻을 수있는 것은 빈 프롬프트뿐입니다.
폴더 이름:
내가 놓친 간단한 방법이 있습니까?
표준 라이브러리 기능 input()
과 raw_input()
이 기능이 없습니다. Linux를 사용하는 경우 readline
모듈을 사용하여 사전 채우기 값 및 고급 라인 편집을 사용하는 입력 함수를 정의 할 수 있습니다 .
import readline
def rlinput(prompt, prefill=''):
readline.set_startup_hook(lambda: readline.insert_text(prefill))
try:
return input(prompt) # or raw_input in Python 2
finally:
readline.set_startup_hook()
나는 당신이 명령 줄에서 의미한다고 가정하고 있습니다. 명령 줄 프롬프트의 초기 값은 본 적이 없으며 일반적으로 다음과 같은 형식입니다.
Folder [default] :
코드에서 간단히 :
res = raw_input('Folder [default] : ')
res = res or 'default'
또는 Python 의 curses 모듈을 사용하여 무언가를 시도 할 수 있습니다 .
이것은 창에서 작동합니다.
import win32console
_stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)
def input_def(prompt, default=''):
keys = []
for c in unicode(default):
evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
evt.Char = c
evt.RepeatCount = 1
evt.KeyDown = True
keys.append(evt)
_stdin.WriteConsoleInput(keys)
return raw_input(prompt)
if __name__ == '__main__':
name = input_def('Folder name: ')
print
print name
최고의 (가장 쉽고 가장 이식 가능한) 솔루션은 @rlotun과 @Stephen 답변의 조합이라고 생각합니다.
default = '/default/path/'
dir = raw_input('Folder [%s]' % default)
dir = dir or default
이 문제를 해결하기 위해 클립 보드를 사용하는 것이 좋습니다. 클립 보드를 입력 줄에 붙여넣고 필요에 따라 편집 한 다음 Enter 키를 누릅니다. 변수 clpstack은 기존 클립 보드 내용을 보호하는 데 사용됩니다. 이 코드는 Windows 용입니다. Linux는 가져 오기 클립 보드를 사용할 수 있습니다.
import pyperclip as clp
clpstack=clp.paste()
clp.copy("192.168.4.1")
HOST = input("Enter telnet host: ")
clp.copy(clpstack)
마침내 Windows와 Linux에서 작동하는 간단한 대안을 찾았습니다. 기본적으로 사용자 입력을 시뮬레이션하기 위해 pyautogui 모듈을 사용하고 있습니다. 실제로는 다음과 같습니다.
from pyautogui import typewrite
print("enter folder name: ")
typewrite("Default Value")
folder = input()
경고의 말씀 :
- 이론적으로 사용자는
typewrite
완료 하기 전에 키를 눌러 "기본"입력 중간에 문자를 삽입 할 수 있습니다 . - pyautogui는 헤드리스 시스템에서 신뢰할 수없는 것으로 악명 높으므로 가져 오기가 실패 할 경우 백업 솔루션을 제공해야합니다. 를 실행
No module named 'Xlib'
하면python3-xlib
또는python-xlib
패키지 (또는xlib
모듈) 를 설치해보십시오 . ssh 를 통해 실행하는 것도 문제가 될 수 있습니다 .
대체 구현의 예 :
누락 된 x-server는 논리적으로 Linux에서만 발생할 수 있으므로 다음은 sth의 대답을 대체로 사용하는 구현입니다.
try:
from pyautogui import typewrite
autogui = True
except (ImportError, KeyError):
import readline
autogui = False
def rlinput(prompt, prefill=''):
if autogui:
print(prompt)
typewrite(prefill)
return input()
else:
readline.set_startup_hook(lambda: readline.insert_text(prefill))
try:
return input(prompt)
finally:
readline.set_startup_hook()
최선의 방법은 아니지만 공유를 위해 ... Javascript를 사용하여 IPython Notebook에서 모든 종류의 입력을 얻을 수 있습니다.
from IPython.display import HTML
newvar = ""
htm = """
<input id="inptval" style="width:60%;" type="text" value="This is an editable default value.">
<button onclick="set_value()" style="width:20%;">OK</button>
<script type="text/Javascript">
function set_value(){
var input_value = document.getElementById('inptval').value;
var command = "newvar = '" + input_value + "'";
var kernel = IPython.notebook.kernel;
kernel.execute(command);
}
</script>
"""
HTML(htm)
다음 셀에서 새 변수를 사용할 수 있습니다.
print newvar
We can use Tkinter and use a StringVar to do this. The limitation is that the input is through a Tkinter window.
from tkinter import Tk, LEFT, BOTH, StringVar
from tkinter.ttk import Entry, Frame
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("Entry")
self.pack(fill=BOTH, expand=1)
self.contents = StringVar()
# give the StringVar a default value
self.contents.set('test')
self.entry = Entry(self)
self.entry.pack(side=LEFT, padx=15)
self.entry["textvariable"] = self.contents
self.entry.bind('<Key-Return>', self.on_changed)
def on_changed(self, event):
print('contents: {}'.format(self.contents.get()))
return True
def main():
root = Tk()
ex = Example(root)
root.geometry("250x100+300+300")
root.mainloop()
if __name__ == '__main__':
main()
I like this, It works on window
def inputWdefault(prompt, default):
bck = chr(8) * len(default)
ret = input(prompt + default + bck)
return ret or default
This is not a very Good Answer but it is a work around for windows. As hard as I tried, I could not get Readline or pyReadline to work on my Windows10 computer with Python Ver 3.5. So I wrote this instead. Not the best code in the world since I've only been using Python for 3 months. But it works.
import os
def note_input(defaultvalue):
#Create a textfile
txtfile = open("txtfile.txt", "w")
#
# populate it with the default value
txtfile.write(defaultvalue)
txtfile.close()
#
# call Notepad
os.system("notepad.exe txtfile.txt")
# input("Just holding until notepad is close : ") (did not need this line)
#
# get the Value Entered/Changed in Notepad
txtfile = open("txtfile.txt", "r")
func_value = txtfile.read()
txtfile.close()
return func_value
# END DEF
Notepad stopped the program from running until it was closed, so the input() line below it was not needed. Once notepad was opened the first time and placed where I wanted it on the screen, It was like a popup input window. I assume you can use any text editor like Notepad++ or Scripe or Code Writer, etc.
If you do that, the user would have to delete the existing word. What about providing a default value if the user hits "return"?
>>> default_folder = "My Documents"
>>> try: folder = input("folder name [%s]:" %default_folder)
... except SyntaxError: folder = default_folder
ReferenceURL : https://stackoverflow.com/questions/2533120/show-default-value-for-editing-on-python-input-possible
'program tip' 카테고리의 다른 글
Java에서 LinkageErrors를 처리하는 방법은 무엇입니까? (0) | 2020.12.25 |
---|---|
Eclipse에서 스텁 Junit 테스트를 어떻게 만들 수 있습니까? (0) | 2020.12.25 |
UNIX 줄 끝을 사용하도록 Visual Studio 구성 (0) | 2020.12.25 |
mongodb를 임베디드 데이터베이스로 사용할 수 있습니까? (0) | 2020.12.25 |
C #에서 while 루프를 이스케이프하는 방법 (0) | 2020.12.25 |