【发布时间】:2014-12-09 14:31:14
【问题描述】:
我有一个 python 脚本需要运行 perl 脚本,等待它完成,然后继续。
由于这种情况只会发生在 windows 机器上,我想我可以简单地打开一个新的 cmd 并在那里运行 perl 脚本,但我在这样做时遇到了困难。
import os
os.system("start /wait cmd /c {timeout 10}")
应该打开一个新的 cmd 并休眠 10 秒,但它会立即关闭。我不想将 perl 脚本放在timeout 10 的位置,因为它非常耗费资源。
另一个想法是使用subprocess 和call 或Popen 和wait。
perl_script = subprocess.call(['script.pl', params])
但我不确定在这种情况下 perl 脚本的标准输出会发生什么。
我知道perl脚本的位置和参数。
如何从我的 python 脚本运行 perl 脚本,打印输出(很多)并等待它完成?
编辑:
按照@rchang 的建议,我添加了subprocess 和communicate,如下所示,它按预期工作。
import subprocess, sys
perl = "C:\\perl\\bin\\perl.exe"
perl_script "C:\\scripts\\perl\\flamethrower.pl"
params = " --mount-doom-hot"
pl_script = subprocess.Popen([perl, perl_script, params], stdout=sys.stdout)
pl_script.communicate()
这些是我的第一行 perl,只是一个快速复制/过去的脚本来测试它。
print "Hello Perld!\n";
sleep 10;
print "Bye Perld!\n";
【问题讨论】:
标签: python subprocess stdout