【问题标题】:subprocess.call to perl program not working with input file paths?对 perl 程序的 subprocess.call 不能使用输入文件路径?
【发布时间】:2016-02-13 09:53:59
【问题描述】:

我需要从 python 调用 perl 脚本。我正在使用 subprocess.call()。在命令行中 perl 程序工作正常。还有

cmd = [ 'C:/Perl/bin/perl', 'D:/pgm.pl', '-h' ]
subprocess.call(cmd)

这给出了一个返回码 0。我认为这意味着它工作正常。但是当我添加输入路径和其他参数时,即

cmd = [ 'C:/Perl/bin/perl', 'D:/pgm.pl', '-m', 'mode', 'D:/input.txt', 'D:/out.xml' ]
subprocess.call(cmd)

我得到的返回码是 22 并且没有获得输出。(* 它在 cmd 中工作)。

请帮忙。我被困住了,无法继续我的工作。任何帮助表示赞赏。 谢谢!

【问题讨论】:

  • 如果在 cmd 中运行,echo %errorlevel% 是什么?
  • 不相关:您可以使用r'D:\pgm.pl' 代替'D:/pgm.pl'
  • 仍然无法正常工作。给出返回码 22。
  • 您说:“它在 cmd 中工作”。 cmd中的errorlevel是多少?
  • 已尝试回显 %errorlevel%- 返回退出代码 0

标签: python perl subprocess


【解决方案1】:

试试这个代码

cmd = [ 'C:/Perl/bin/perl', 'D:/pgm.pl', '-m', 'mode', 'D:/input.txt', 'D:/out.xml' ]
subprocess.call(" ".join(cmd))

【讨论】:

  • 如果 cmd 被传递一个字符串,我认为你必须把可选参数 shell=True 。使用 linux 对其进行测试:subprocess.call("cat /etc/passwd", shell=True).
  • @Lynch:Windows 上不需要它。
猜你喜欢
  • 2020-10-03
  • 2012-03-19
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
相关资源
最近更新 更多