python是否可以接受这样的输入:
Folder name: Download
但是,用户不是键入"下载",而是将其作为初始值.如果用户想要将其编辑为"下载",他只需要添加's'并按Enter键.
使用正常输入命令:
folder=input('Folder name: ')
Run Code Online (Sandbox Code Playgroud)
我能得到的只是一个空白提示:
Folder name:
有没有一种简单的方法可以做到这一点,我错过了?
sth*_*sth 65
标准库函数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()
Run Code Online (Sandbox Code Playgroud)
rlo*_*tun 18
我假设你是从命令行的意思.我从未见过命令行提示的初始值,它们通常是以下形式:
Folder [default] :
Run Code Online (Sandbox Code Playgroud)
在代码中简单地说:
res = raw_input('Folder [default] : ')
res = res or 'default'
Run Code Online (Sandbox Code Playgroud)
或者,您可以尝试使用Python中的curses模块执行某些操作.
qtw*_*trt 10
这适用于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
Run Code Online (Sandbox Code Playgroud)
我终于找到了一个适用于 Windows 和 Linux 的简单替代方案。本质上,我使用pyautogui模块来模拟用户的输入。在实践中,它看起来像这样:
from pyautogui import typewrite
print("enter folder name: ")
typewrite("Default Value")
folder = input()
Run Code Online (Sandbox Code Playgroud)
typewrite完成之前按下一个键,在“默认”输入的中间插入字符。No module named 'Xlib',请尝试安装python3-xlib或python-xlib包(或xlib模块)。运行 ssh也可能是一个问题。由于缺少 X 服务器在逻辑上只能在 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()
Run Code Online (Sandbox Code Playgroud)