从我的python脚本运行perl脚本,打印输出并等待它完成

时间:2014-12-09 14:31:14

标签: python subprocess stdout

我有一个python脚本,需要运行一个perl脚本,等待它完成,然后继续。

由于这种情况只发生在Windows机器上,我以为我可以只是打开一个新的cmd并在那里运行perl脚本,但我很难这样做。

import os

os.system("start /wait cmd /c {timeout 10}")

应该打开一个新的cmd并睡10秒钟,但它立即关闭。我不想将perl脚本放在timeout 10的位置,因为它非常耗费资源。 另一个想法是使用subprocesscallPopenwait

perl_script = subprocess.call(['script.pl', params])

但我不确定在这种情况下perl脚本的stdout会发生什么。

我知道perl脚本的位置和参数。

如何从我的python脚本运行perl脚本,打印输出(很多)并等待它完成?

编辑:

根据@rchang的建议,我添加了subprocesscommunicate,如下所示,它可以正常运行。

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";

2 个答案:

答案 0 :(得分:4)

import subprocess
import sys

perl_script = subprocess.Popen(["script.pl", params], stdout=sys.stdout)
perl_script.communicate()

这应该将子进程的stdout连接到Python脚本的stdout流,前提是您实际上不需要Python脚本在执行期间输出任何可能与子进程输出无关的其他有意义的东西。

答案 1 :(得分:1)

你可以尝试:

perl_script = subprocess.check_output(["script.pl", params])
print perl_script