从 Python 子进程调用 perl 脚本中的 GetOptions
Call GetOptions in perl script from Python subprocess
我在 ubuntu 服务器 16.04 上有 python 应用程序 运行ning,行如下:
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 脚本将变量 var1
和 var2
中的值分别作为单个字符串传递。你需要拼出整个命令行
proc = subprocess.Popen(["sudo", \
"perl", "/path/script.pl", "--var1", str(var1), "--var2", str(var2) ], \
stdout=subprocess.PIPE)
此处 var1
仅包含值,而不是问题中的 "--var1 "
字符串(与 var2
相同)。
我在 ubuntu 服务器 16.04 上有 python 应用程序 运行ning,行如下:
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 脚本将变量 var1
和 var2
中的值分别作为单个字符串传递。你需要拼出整个命令行
proc = subprocess.Popen(["sudo", \
"perl", "/path/script.pl", "--var1", str(var1), "--var2", str(var2) ], \
stdout=subprocess.PIPE)
此处 var1
仅包含值,而不是问题中的 "--var1 "
字符串(与 var2
相同)。