Python:没有来自(Perl)子进程的输出

时间:2015-01-27 16:05:06

标签: python subprocess popen

所以我想从Python激活一个Perl脚本,经过一段时间我已经进入了执行它的阶段,但我没有输出,我也不知道出了什么问题。

我甚至不知道它是否识别脚本或输入文件,因为它接受所有内容并且不会给出任何错误消息。

script = subprocess.Popen(["perl" , "C:\\Users\\...\\pal2nal.pl" , "C:\\Users\\...\\input_file" , "C:\\Users\\...\\output_file" ], stdout=subprocess.PIPE)

while True:
    line = script.stdout.readline()
    if line == b'' and script.poll() != None:
        break
    sys.stdout.write(line.decode('utf-8'))
    sys.stdout.flush()

output = script.communicate()[0]
exitCode = script.returncode 

如果有人对http://www.bork.embl.de/pal2nal/distribution/pal2nal.v14.tar.gz

感兴趣,这是脚本

这是我第一次使用子进程并尝试进行错误检查但最终没有成功。

1 个答案:

答案 0 :(得分:0)

要在到达时逐行显示子进程输出,以便在变量中捕获它:

#!/usr/bin/env python3
import io
from subprocess import Popen, PIPE

lines = []
with Popen(["perl" , r"C:\Users\...\pal2nal.pl", 
            r"C:\Users\...\input_file", 
            r"C:\Users\...\output_file"],
           stdout=PIPE, bufsize=1) as p:
    for line in io.TextIOWrapper(p.stdout, encoding='utf-8'):
        print(line, end='')
        lines.append(line)
output = ''.join(lines)
print(len(lines), p.returncode)