所以我想从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
感兴趣,这是脚本这是我第一次使用子进程并尝试进行错误检查但最终没有成功。
答案 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)