我知道有关Stack Overflow的一些话题。但这些对我来说都没有任何意义。我是python和perl的新手,并尽我所能去理解。我想从一段python代码中运行一个perl脚本。
在命令提示符下执行perl脚本如下:
perl perlscript.pl input.bopt7 output.xml
我想从我的python代码中运行此命令。 我尝试过以下方法:
pipe = subprocess.Popen(["perlscript.pl" , "input.bopt7" , "output.xml"], stdout=subprocess.PIPE)
但这不起作用。我得到一个错误,说它不是一个有效的win32 ...
我不需要此脚本的输入或输出。只需要运行一次。
答案 0 :(得分:2)
执行perl脚本时需要包含perl
命令:
pipe = subprocess.Popen(["perl", "perlscript.pl" , "input.bopt7" , "output.xml"], stdout=subprocess.PIPE)
你在命令行提示符下做了同样的事情; Popen
类无法从perlscript.pl
文件中猜出您想要使用Perl运行此脚本。 : - )
答案 1 :(得分:0)
如果您perl.exe
中有perl.exe
,则第一个参数应为PATH
;或者是可执行文件的完整路径,因为其余的都是perl.exe
的参数。
另请确保为perlscript.pl
和input.bopt7
添加完整路径。
答案 2 :(得分:0)
您是否尝试将perl添加到Popen参数中(就像在命令行中一样)?
pipe = subprocess.Popen([“perl”,“perlscript.pl”,“input.bopt7”,“output.xml”],stdout = subprocess.PIPE)
在您的示例中,Windows尝试将“perlscript.pl”作为Win32可执行文件执行,因为这是您指定的第一个参数,并且因为它不包含正确的二进制标头而失败(因为它是文本文件)