2016-08-17 4 views
-1

私はthis答えからコードを実行しようとしています。便宜上、コードは以下のとおりです。このコードは他の誰かのために機能しますが、私はなぜ機能しませんか?

main.py

from subprocess import Popen, PIPE 

p = Popen(['py', 'client.py'], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True) 
r = True 
while r: 
    r = p.stdout.readline() 
    print r 

client.py

def fn(): 
    for a in (0, 1, 2): 
     print a 
fn() 

OUTP:答えは貢献した人はそれが彼らのために働くと述べ

b'0\r\n' 
b'1\r\n' 
b'2\r\n' 
b'' 

。しかし、私は出力を生成することはできません。私は、Mac、Linux、およびWindowsのpython 2.7でこれを試みました。

これがうまくいく場合は、なぜそれが私にとってうまくいかないのか説明してください。私がやっているのは、両方のファイルがあるディレクトリにpython main.pyです。

EDIT:「OUT:」は私が得るはずのものです。しかし、私は何も得られません。

+0

コードが期待される出力と一致しないこと。あなたが得た答えの編集履歴を見ると、コードは毎回テストすることなく繰り返し変更されているようです。 – user2357112

+0

コードを実行しても出力が得られません。上記は「提供されたソリューション」の最新バージョンです。 OUT:彼が得るもの/私が得るべきもの。 – BadProgrammer

+0

最後に、r.returncodeを印刷して、サブプロセスが正常に完了しましたか? – James

答えて

0

これを行うとどうなりますか?

main.py

from subprocess import check_output 

client_output = check_output(['python', 'client.py']) 
print client_output 

https://docs.python.org/2/library/subprocess.html

あなたはPopen.communicate()方法になります。たぶん

このような何か:

main.py

from subprocess import Popen, PIPE 

p = Popen(['python', 'client.py'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
print p.communicate()[0] 
+0

それは0 1 2を生成し、私のために働く。これはなぜですか? – BadProgrammer

+2

私はあなたがコメントにコードブロックを入れることができないことを知っています。それにもかかわらず、これはコメントであり、答えではありません。 –

+0

@BadProgrammer: 'py'ではなく' python'のせいかもしれません。 'py'というプログラム、エイリアス、またはシンボリックリンクがありますか? – cdarke

関連する問題