2012-01-12 4 views
-1

私はundestandしようとしていますどのようにinputが動作します。例えばのような単純な機能を考えるとinput()に入力を提供する唯一の方法はサブプロセスですか?

def f(): 
    s = input() 
    print(s) 

fを呼び出し、それがパイプラインを構築することなく、何かを印刷するようにする方法がありますか?

明らかに言葉に何も入力しないでください。私は必ずしもこのソリューションをお勧めしていますが、別の関数にinputを再バインドでき...

答えて

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を再定義したい)。

代わりに、任意のファイルから読み込み(既定値は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')) 
1

はい、サブプロセスで第二のpythonシェルを実行するとinputに入力を与えるための唯一の方法であることを

+0

。任意のファイルから読み込み、デフォルトの 'sys.stdin'を作り、別のファイルを設定することで何を意味するのか説明できますか? –

+0

@RikP。デモコードを追加しました。あなたにはっきりしていない部分はどれですか? – phihag

+0

今、私はあなたが何を意味したのか理解しています、ありがとう!私は 'input'の仕組みを理解しようとしていましたが、あなたの例はとにかく役に立ちました。 –

-1

デフォルトテキストをinput()に指定することはできません。

しかし、あなたはLinuxとバッシュを使用している場合、あなたはこのような何かを行うことができます(このSO-answerから変更)

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") 

も参照してください:

+0

Enterキーを押す必要はありませんか? –

+0

ここでbashを使用する必要があるのはなぜですか? – glglgl

+0

@RikP .:入力を完了するには、Enterキーを押す必要があります。どのように他に提出したいですか? glglgl:私は他のシェルを使用しませんでした。私はそれがほぼすべてのシェルで動作するかもしれないと思うが、それはgedits "Better Python Console"ではうまくいきませんでした。より多くのシェルでそれをテストしなかったので、私はそれがうまくいかないかもしれないことに気づきたいと思っていました。 –

関連する問題