2012-01-12 58 views

回答

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 
0

這並不是說我一定會推薦這個解決方案,但你可以重新綁定input到不同的功能...

1

是,在子進程執行的第二蟒蛇殼是給輸入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')) 
+0

我不明白你在說什麼。你能從一個任意文件中解釋你的意思嗎,使用默認的'sys.stdin'然後設置一個不同的文件? – 2012-01-12 14:02:04

+0

@RikP。添加了演示代碼。句子的哪一部分對你不清楚? – phihag 2012-01-12 14:33:00

+0

現在我明白你的意思了,謝謝!我試圖理解'input'是如何工作的,但是無論如何你的例子都很有幫助。 – 2012-01-12 14:39:09

-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修改)。

參見:

+0

這不需要按Enter鍵? – 2012-01-12 13:54:36

+0

爲什麼需要在這裏使用bash? – glglgl 2012-01-12 14:17:09

+0

@RikP .:您需要按回車才能完成輸入。你想如何提交它呢? glglgl:我沒有使用其他的shell。我猜它可能適用於幾乎所有的shell,但它不適用於gedits「更好的Python控制檯」。因爲我沒有用更多的shell來測試它,我只是想指出它可能無法工作。 – 2012-01-12 14:47:32

相關問題