python - 无法使用 python 将参数传递给 perl 脚本

标签 python python-3.x perl

我正在尝试做一个简单的操作——从 python3 脚本中执行 perl 脚本,将几个参数传递给 perl 脚本。这是我尝试过的,没有任何效果:

方法 1——perl 脚本运行,但参数未传递

addexec = "../perl/bin/engine.pl"
addvars = " --uid " + str(our_id) + " --url '" + source_url + "'"
addtodb = subprocess.Popen(["/usr/bin/perl", addexec, addvars])

方法 2——perl 脚本不运行,提示找不到文件

addexec = "../perl/bin/engine.pl --uid " + str(our_id) + " --url '" + source_url
addtodb = subprocess.Popen(["/usr/bin/perl", addexec])

方法 3——perl 脚本不运行,生成错误

addcmd = ["/usr/bin/perl", "../perl/bin/engine.pl", " --uid ", str(our_id), " --url '", source_url, "'"]
addtodb = subprocess.Popen(addcmd)

大家有什么建议吗?谢谢!

最佳答案

方法 3 看起来大致正确,但您几乎肯定不想“引用”URL,需要提供正确的脚本路径,并且希望将单个列表传递给 Popen。尝试:

addcmd = ["/usr/bin/perl", "../perl/bin/engine.pl", "--uid", str(our_id), "--url", source_url]
addtodb = subprocess.Popen(addcmd)

更新:合并来自@AJefferiss的修复

对于如何处理程序参数,这里似乎存在一个潜在的误解。

命令 shell 通过解析用户输入来确定程序参数 - 通常按空格进行分割(除非用引号引起来)。相比之下,Popen 等底层 API 直接接受参数列表。

结果是,在使用此类 API 时,1) 您不需要引号,2) 您需要在参数周围删除额外的空格。这也是为什么您(通常)不能使用 shell 语法(如 ~、通配符扩展或环境变量)的原因。

关于python - 无法使用 python 将参数传递给 perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872246/

相关文章:

xml - python : lxml returns empty list from svg with xpath

Python - 循环遍历一个字符串

perl - 如何使用 Perl 将多维数组 (AoA) 添加到 Excel?

linux - Perl - 如何将输入拆分为数组?

javascript - 在 Python 或 JavaScript 中实现 C 预处理器?

python - 数据框中特定行的总和( Pandas )

python - 简单的 Python UDP 服务器 : trouble receiving packets from clients other than localhost

python - Pandas 中的 TextFileReader 参数

python - pywinauto capture_as_image 添加不需要的边框

c - XS:将外部库的函数传递给 Perl XS 回调