【问题标题】:Run perl script from python从 python 运行 perl 脚本
【发布时间】:2012-09-05 06:51:43
【问题描述】:

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

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

【问题讨论】:

  • 您在 Windows 中安装了 PERL 吗?
  • 我可以从 windows 命令提示符运行 perl 脚本,所以我猜 perl 已经安装了。
  • 您在命令提示符中运行的命令与您在Popen 中运行的命令不同——前者运行perl 并将脚本作为参数传递,后者尝试执行脚本本身。你试过Popen(["perl", "perlscript.pl", "input.bopt7", "output.xml"], ...)吗?

标签: python windows perl


【解决方案1】:

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

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

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

【讨论】:

  • 错误现在消失了。该脚本看起来正在执行(命令提示符很快打开),但未创建 output.xml 文件...(通常在命令提示符下运行此脚本时会这样做)
  • 您确定perlscript.pl 与此python 脚本位于同一目录中吗?将完整路径以及input.bopt7 传递给它
  • 应该是perl.exe;或者您需要指定完整路径。我的 Windows 习语有点生疏。还要确保您的路径已完全指定。
  • 附带问题:如何让我的程序等到脚本完全执行。现在程序在创建 output.xml 之前继续。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    还要确保您输入了 perlscript.plinput.bopt7 的完整路径。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 1970-01-01
      • 2010-09-26
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2023-03-15
      • 2020-12-31
      相关资源
      最近更新 更多