2016-12-21 2 views
0

2つのスクリプトを1つだけ入力してから入力します。もう1人がスクリプトを起動します。それは半分しか働かず、私は誰かがこの問題についていくつかの光を当てることを望んでいた。Popenを使って別のスクリプトを起動して、入力を送信する

test.py

import subprocess 

process = subprocess.Popen('python test2.py', shell=False, 
          stdin=subprocess.PIPE, stdout=subprocess.PIPE, 
          stderr=None) 
process.stdin.write("test\r\n".encode('utf-8')) 
process.stdin.flush() 

result = process.stdout.readline()[:-2].decode('utf-8') 
print(result) 
while result != "": 
    result = process.stdout.readline()[:-2].decode('utf-8') 
    print(result) 

test2.py

s=input("input here:") 
print(s) 

期待出力:

input here:test 
test 

実際の出力:

input here:test 
+0

実際の出力から、何かが入力されていることがわかりますが、testという単語がstdinによって書き込まれていますが、スクリプトの印刷部分が見えません。 – kaminsknator

+0

実際の出力は、 'NameError:name 'test' is not defined'の後ろに' input her'という行が続くトレースバックです。 – martineau

+0

それでは、これを機能させるために何を修正する必要があるのか​​よく分かりません。 – kaminsknator

答えて

0

入力がエコーされないことに注意してください。端末に座って「python test2.py」を実行する場合は、端末は入力時に入力をエコーし​​ます。それは、単語 "テスト"を2回表示します。あなたのtest.pyプログラムは "test"という単語をパイプを通して送ります。それを標準出力に出力しません。 test2.pyプログラムは入力を1回だけ出力します。したがって、出力 "input here:test"は正しいです。

関連する問題