2015-11-10 80 views
0
output = cStringIO.StringIO() 
output.write('string') # this emulates some_file.txt 

p = subprocess.Popen(['perl', 'file.pl'], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
line, _ = p.communicate(output.getvalue()) 
print line 
output.close() 

這打印Can't open perl script "file.pl": No such file or directory。 python腳本和perl文件在同一個目錄下!獲取`perl file.pl <some_file.txt` shell命令的輸出

我想line是的perl file.pl < some_file.txt

輸出如何做到這一點?

+0

是在當前工作目錄中的file.pl? –

+0

@ ChadS.Yes,它在同一個目錄中。我已經更新了這個問題。 –

+0

你的問題似乎與'subprocess'和'cStringIO'沒有任何關係。嘗試指定'file.pl'的絕對路徑。 – martineau

回答

0

我想行是perl file.pl < some_file.txt

#!/usr/bin/env python 
from subprocess import check_output 

with open('some_file.txt', 'rb', 0) as file: 
    line = check_output(['perl', 'file.pl'], stdin=file) 

輸出就可以了Can't open perl script "file.pl": No such file or directory,通過完整路徑file.pl例如,如果是在同一個目錄中的Python腳本,那麼你可以使用get_script_dir() function來獲取路徑。