Python是否可以接受这样的输入:
文件夹名称:下载
但是,用户不需要键入“下载”,它已经作为初始值存在。如果用户想将其编辑为“下载s”,则只需添加'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模块。
这在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
print name
是一个明显的提示 ;) 对于Windows上的Python 3解决方案,请参见我的类似问题的答案,稍微修改一下代码:https://dev59.com/GV0a5IYBdhLWcg3wipXk#32156249 - mbdevpl我终于找到了一种简单的替代方案,它适用于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上,因此以下是一种使用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()
我建议使用剪贴板来解决这个问题。将剪贴板粘贴到输入行中,根据需要进行编辑,然后按Enter键。变量clpstack用于保护现有的剪贴板内容。此代码适用于Windows。Linux可以使用import clipboard。
import pyperclip as clp
clpstack=clp.paste()
clp.copy("192.168.4.1")
HOST = input("Enter telnet host: ")
clp.copy(clpstack)
我认为最好的(最简单和最便携)解决方案是结合@rlotun和@Stephen的回答:
default = '/default/path/'
dir = raw_input('Folder [%s]' % default)
dir = dir or default
我喜欢这个,它在Windows上运行
def inputWdefault(prompt, default):
bck = chr(8) * len(default)
ret = input(prompt + default + bck)
return ret or default
最近遇到了这个问题。以上的答案似乎都不完美。因此我进行了一些研究,并发现以下解决方案是最简单的,适用于Windows和Linux:
import keyboard
def input_with_default(prompt_, default_):
keyboard.write(default_)
return input(prompt_)
if __name__ == "__main__":
print(input_with_default("Please enter: ", "hello world"))
keyboard
不是标准库的一部分。可能这个答案是指https://pypi.org/project/keyboard/。 - matt wilkiefrom PyInquirer import prompt
question = [
{
'type': 'input',
'name': 'first_name',
'message': 'Name please',
'default': 'Max'
}
]
answer = prompt(question)
print('Hello {}'.format(answer['first_name']))
我喜欢@MCO采取的方法,所以我重构了代码。我在X Windows和Microsoft Windows 10 WSL 2上使用Microsoft Terminal进行了测试:
def input_with_default(prompt, prefill=''):
try:
from pyautogui import typewrite
print(prompt)
typewrite(prefill)
return input()
except (ImportError, KeyError):
import readline
readline.set_startup_hook(lambda: readline.insert_text(prefill))
try:
return input(prompt)
finally:
readline.set_startup_hook()