2013-04-03 17 views
8

pythonスクリプトにコマンドラインで実行可能ファイルを渡します。私はいくつかの計算を行い、次にこれらの計算の結果をSTDINで実行可能ファイルに送信したいと思います。終了したら、STDOUTから実行可能ファイルの結果を戻したいと思います。Python Popenがstdoutで処理するために標準出力で受信

ciphertext = str(hex(C1)) 
exe = popen([sys.argv[1]], stdout=PIPE, stdin=PIPE) 
result = exe.communicate(input=ciphertext)[0] 
print(result) 

を印刷すると、何も表示されません。空白行はありません。以前の計算結果と同じコマンドラインで '>'を使って同じことを繰り返したので、実行可能ファイルがデータと一緒に動作することを確信しています。

+0

は、あなたが実行可能でさえで改行せずに動作することをテストしていることは確かです入力の最後? "echo"は改行を追加し、 "echo -n"は改行しません。 – svk

+0

@svk yepは改行でも同様に動作します。 –

答えて

12

実施例

#!/usr/bin/env python 
import subprocess 
text = 'hello' 
proc = subprocess.Popen(
    'md5sum',stdout=subprocess.PIPE, 
    stdin=subprocess.PIPE) 
proc.stdin.write(text) 
proc.stdin.close() 
result = proc.stdout.read() 
print result 
proc.wait() 

execuable <params.file> output.file」と同じものを取得するには、次の操作を行います。

#!/usr/bin/env python 
import subprocess 
infile,outfile = 'params.file','output.file' 
with open(outfile,'w') as ouf: 
    with open(infile,'r') as inf: 
     proc = subprocess.Popen(
      'md5sum',stdout=ouf,stdin=inf) 
     proc.wait() 
+0

同じ結果、空行。 Popenは実際にはコマンドラインで '<'と同じですか?私はこれを再作成しようとしています:oracle.exe output.file –