我有一个我想从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编程,所以我确信以上内容完全是胡说八道。任何帮助将不胜感激。
答案 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可以帮到你。不知道怎么办。