【发布时间】:2015-01-27 16:05:06
【问题描述】:
所以我想从 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
这是我第一次使用子流程,并尝试过错误检查,但最终没有成功。
【问题讨论】:
-
您正在读取循环中的输出,因此输出将为空,您还应该添加
stderr=PIPE。for line in iter(script.stdout.readline,b""): print(line)将读取输出。如果你希望它存储在输出中删除你的循环 -
现在工作!谢谢你,你救了我。
-
别担心,不客气
-
请勿添加
stderr=PIPE,除非您使用线程或异步同时读取两个管道。 io.
标签: python subprocess popen