2012-01-31 7 views
0

pythonでパイプコマンド(echo -e "HEAD/HTTP/1.0 \ n" | ncat -C localhost 80)を呼び出そうとしています。pythonでpiped cmdを実行中 - 別の結果

from subprocess import call 
cmd = 'echo -e "HEAD/HTTP/1.0\n" | ncat -C localhost 80' 
output=call(cmd, shell=True) 
print output 

はしかし、結果は予想より異なります

HTTP/1.1 400 Bad Request 
... 

期待される結果は、(シェルからそのCMDを実行している場合)である:

HTTP/1.1 302 Redirect 
... 

アップデート: 私はちょうど実験と、この完璧に動作するようです。

from subprocess import Popen, PIPE 
p1 = Popen(['echo', 'HEAD/HTTP/1.0\n'], stdout=PIPE) 
p2 = Popen(["ncat", "-C", "localhost", "80"], stdin=p1.stdout) 
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. 
output = p2.communicate()[0] 

答えて

0

あなた\nのpython文字列中の改行を生成しています。私はあなたがechoにそれを解釈したかったと仮定しています。それを生の文字列にしてみてください:

cmd = r'echo -e "HEAD/HTTP/1.0\n" | ncat -C localhost 80' 

このようにして、Pythonは '\ n'を解釈せずに渡されます。

+0

考えてくれてありがとうございますが、まだ動作しません... –

+0

リテラルな改行だからちょっと違うコマンドであっても、それを考えた後、改行は二重引用符で囲まれています。出力。 – FatalError

関連する問題