从Python调用Perl脚本

时间:2011-01-13 15:56:00

标签: python

我有一个我想从Python脚本调用的Perl脚本。我一直在寻找,并没有成功。我基本上试图调用Perl脚本向它发送1个变量,但不需要Perl脚本的输出,因为它是一个自包含的程序。

到目前为止,我想出的是:

var = "/some/file/path/"
pipe = subprocess.Popen(["./uireplace.pl", var], stdin=subprocess.PIPE)
pipe.stdin.write(var)
pipe.stdin.close()

只是刚开始使用Python编程,所以我确信以上内容完全是胡说八道。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:15)

只是做:

var = "/some/file/path/"
pipe = subprocess.Popen(["perl", "uireplace.pl", var])

答案 1 :(得分:8)

如果您只想打开一个perl解释器的管道,那么您就是在正确的轨道上。我认为你唯一缺少的是perl脚本本身不是可执行文件。所以你需要这样做:

var = "/some/file/path/"
pipe = subprocess.Popen(["perl", "./uireplace.pl", var], stdin=subprocess.PIPE)
pipe.stdin.write(var)
pipe.stdin.close()

答案 2 :(得分:3)

您可以尝试使用subprocess.call()方法。它不会返回您正在调用的命令的输出,而是返回代码以指示执行是否成功。

var = "/some/file/path"
retcode = subprocess.call(["./uireplace.pl", var])
if retcode == 0:
    print("Passed!")
else:
    print("Failed!")

确保您的Perl脚本是可执行的。否则,您可以在命令中包含Perl解释器(如下所示):

subprocess.call(["/usr/bin/perl", "./uireplace.pl", var])

答案 3 :(得分:2)

您想将var作为参数传递给stdin或两者吗?要将其作为参数传递,请使用

subprocess.call(["./uireplace.pl", var])

要将其传递给stdin,请使用

pipe = subprocess.Popen("./uireplace.pl", stdin=subprocess.PIPE)
pipe.communicate(var)

两个代码段都需要uireplace.pl才能执行。如果不是,您可以使用

pipe = subprocess.Popen(["perl", "./uireplace.pl"], stdin=subprocess.PIPE)
pipe.communicate(var)

答案 4 :(得分:0)

我希望this可以帮到你。不知道怎么办。