gpt4 book ai didi

python - 从 Python 子进程调用 Perl 脚本中的 GetOptions

转载 作者:行者123 更新时间:2023-11-30 22:33:25 25 4
gpt4 key购买 nike

我在 ubuntu 服务器 16.04 上运行 python 应用程序,其行如下:

var1 = "--var1 " + var1
var2 = "--var2 " + var2
proc = subprocess.Popen(["sudo", "perl", "/path/script.pl", str(var1), str(var2) ], stdout=subprocess.PIPE)

Perl 脚本包含以下行:

#!/usr/bin/perl
use File::Path;
use Getopt::Long;
use strict;
use warnings;

my $var1 = '';
my $var2 = '';

print "Started ";

GetOptions ("var1=s" => \$var1, "var2=s" => \$var2) or die ("Error");

print "Vars: FIRST = $var1 SECOND = $var2 ";
...

此应用程序由 sudo 组的成员运行,该组成员有权在没有密码的情况下运行任何 sudo 命令。当我以该用户身份从终端运行此命令时:

su that_user
sudo perl /path/script.pl --var1 XXX --var2 YYY

我得到了想要的输出:

Started 
Vars: FIRST = XXX SECOND = YYY

但是当我从 python 中将其作为子进程运行时,我只得到:

Started 

如果我删除

or die ("Error")

部分,我会得到:

Started 
Vars: FIRST = SECOND =

没有错误或任何东西。由于我对 Perl 还很陌生,我怀疑我调用 GetOptions 的方式存在语法错误,但是阅读文档和谷歌搜索很长一段时间并没有让我有任何进展。

最佳答案

Perl 脚本中的 GetOptions(...) 行指定如何将输入提交给脚本:

script.pl --var1 s1 --var2 s2

您可以从命令行正确使用它。

但是,您的 Python 脚本将变量 var1var2 中的值分别作为单个字符串传递。您需要拼出整个命令行

proc = subprocess.Popen(["sudo", \
"perl", "/path/script.pl", "--var1", str(var1), "--var2", str(var2) ], \
stdout=subprocess.PIPE)

此处 var1 仅包含值,而不是问题中的 "--var1 " 字符串(与 var2 相同)。

关于python - 从 Python 子进程调用 Perl 脚本中的 GetOptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45161262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com