有可能是蟒蛇接受这样的输入:
Folder name: Download
但是,而不是用户输入“下载”,它是已经存在的初始值。 如果用户希望编辑为“下载”,他所要做的就是添加一个“S”,然后按回车。
使用正常的输入命令:
folder=input('Folder name: ')
所有我能得到的是一个空白的提示:
Folder name:
有一个简单的方法来做到这一点,我失踪?
有可能是蟒蛇接受这样的输入:
Folder name: Download
但是,而不是用户输入“下载”,它是已经存在的初始值。 如果用户希望编辑为“下载”,他所要做的就是添加一个“S”,然后按回车。
使用正常的输入命令:
folder=input('Folder name: ')
所有我能得到的是一个空白的提示:
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模块。
这工作在Windows中。
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
我想使用剪贴板来解决这个问题建议。 剪贴板粘贴到输入线,根据需要编辑,按回车键。 可变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
完成。 No module named 'Xlib'
,尝试安装python3-xlib
或python-xlib
封装(或xlib
模块)。 运行通过ssh 也可以是一个问题 。 由于丢失的x服务器可以在逻辑上只能在Linux上发生,这是一个使用某事的答案作为后备的实现:
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的笔记本电脑的投入。
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
我们可以用Tkinter的,并使用STRINGVAR做到这一点。 的限制是,该输入是通过一个Tkinter的窗口。
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()
我喜欢这个,它适用于窗口
def inputWdefault(prompt, default):
bck = chr(8) * len(default)
ret = input(prompt + default + bck)
return ret or default
这不是一个很好的答案,但它是一个用于Windows的解决办法。 硬如我尝试,我不能得到的Readline或pyReadline与Python的版本3.5我的Windows10电脑上工作。 所以我写了这个代替。 不是世界上最好的代码,因为我只使用Python 3个月了。 但是,它的工作原理。
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
记事本从运行,直到它被关闭停止程序,所以并不需要在它下面的输入()行。 一旦记事本打开的第一时间,放在哪里,我想在屏幕上,它就像一个弹出输入窗口。 我想你可以用任何文本编辑器如记事本++或Scripe或代码刻录机等
如果你这样做,用户必须删除现有的字。 怎么样,如果用户点击“返回”提供的默认值?
>>> default_folder = "My Documents"
>>> try: folder = input("folder name [%s]:" %default_folder)
... except SyntaxError: folder = default_folder