2

我知道 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 ...

我不需要这个脚本的输入或输出。只需要运行一次。

4

3 回答 3

2

perl执行 perl 脚本时需要包含命令本身:

pipe = subprocess.Popen(["perl", "perlscript.pl" , "input.bopt7" , "output.xml"], stdout=subprocess.PIPE)

你在命令行提示符下做了同样的事情;该类Popen无法从perlscript.pl文件中猜出您想用 Perl 运行此脚本。:-)

于 2012-09-12T09:29:15.417 回答
1

您是否尝试将 perl 添加到 Popen 参数中(就像您在命令行上所做的那样)?

pipe = subprocess.Popen(["perl", "perlscript.pl" , "input.bopt7" , "output.xml"], stdout=subprocess.PIPE)

在您的示例中,Windows 尝试将“perlscript.pl”作为 Win32 可执行文件执行,因为这是您指定的第一个参数,并且由于它不包含正确的二进制标头(因为它是文本文件)而失败。

于 2012-09-12T09:30:20.587 回答
0

第一个参数应该是perl.exe,如果perl.exe在你的PATH; 或可执行文件的完整路径,因为其余的都是perl.exe.

还要确保为perlscript.pland放置完整路径input.bopt7

于 2012-09-12T09:29:11.537 回答