我有一个 python 脚本,它必须调用 perl 脚本才能从远程服务器获取数据。perl 脚本必须保留 perl,它是第三方,我在那里没有任何选择。我正在尝试删除以前的开发人员在代码周围卡住的所有过时和弃用的东西,所以我想用子进程调用替换 commands.getstatusoutput 调用,但不知何故我似乎无法得到它工作...
到目前为止,脚本是通过 commands.getstatusoutput(string) 调用的,其中 string 是对 perl 脚本的完整系统调用,如 '/usr/bin/perl /path/to/my/perl/script.pl < /路径/到/我的/输入'。
我创建了一个参数列表(args = ['/usr/bin/perl', '/path/to/my/perl/script.pl', '<', '/path/to/my/input'])我将它传递给 subprocess.call:
args = ['/usr/bin/perl', '/path/to/my/perl/script.pl', '<', '/path/to/my/input']
strOut = subprocess.call(args)
print strOut
不幸的是,这失败并出现错误:
port absent at /path/to/my/perl/script.pl line 9.
perl 脚本是:
#!/usr/bin/perl
use IO::Handle;
use strict;
use Socket;
my ($remote, $port, $iaddr, $paddr, $proto, $ligne);
$remote = shift || 'my.provider.com';
$port = shift || 9000;
if ($port =~ /\D/) { $port = getservbyname ($port, 'tcp'); }
die "port absent" unless $port;
尽管在这里阅读了其他类似的线程(从 python 调用 perl 脚本,如何从 python 调用 perl 脚本?,如何在 Python 脚本中获取 Perl 脚本的结果?,Python getstatusoutput 替换不返回完整输出等)和其他地方,我觉得我错过了一些明显的东西,但我不知道是什么。
有任何想法吗?
谢谢。