2013-04-03 156 views
8

我將命令行上的可執行文件傳遞給我的Python腳本。我做了一些計算,然後我想將STDIN上的這些計算結果發送到可執行文件。完成後,我想從STDOUT中獲取可執行文件的結果。Python Popen發送到標準輸入上處理,接收標準輸出

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

當我打印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 –

相關問題