我试图理解input
的工作方式。
举例说明一个简单的函数:
def f():
s = input()
print(s)
有一种方法可以调用f
并使其在不构建管道的情况下进行打印吗?
显然没有在termimal中输入任何内容。
答案 0 :(得分:2)
这样做的一种方法是暂时重新定义sys.stdin
。
例如:
import sys
from StringIO import StringIO
input_text = 'whatever you want the function to read from input()'
old_stdin = sys.stdin
#Reassign stdin to a StringIO object
sys.stdin = StringIO(input_text)
f()
sys.stdin = old_stdin
答案 1 :(得分:1)
是的,在子进程中执行第二个python shell是向input
提供输入的唯一方法(除非您想在模块中重新定义input
)。
相反,您应该从任意文件中读取(并使其成为默认的sys.stdin
)。然后,您只需设置一个不同的文件 - 磁盘上的临时文件或类似文件的StringIO
对象。
import sys,StringIO
def f(inputfile=sys.stdin):
s = inputfile.readline()
print(s)
# To test, call it like this:
f(StringIO.StringIO('testdata\n'))
答案 2 :(得分:0)
并非我一定会推荐此解决方案,但您可以将input
重新绑定到其他功能...
答案 3 :(得分:-1)
您无法向input()提供默认文字。
但是如果你使用Linux和Bash,你可以这样做:
import readline
def rlinput(prompt, prefill=''):
readline.set_startup_hook(lambda: readline.insert_text(prefill))
try:
return raw_input(prompt)
finally:
readline.set_startup_hook()
rlinput("Do you want to delete all files? ", "yes")
(从此SO-answer修改)。
另见: