gpt4 book ai didi

python - 从 python 调用 perl 脚本适用于commands.getstatusoutput 但不适用于 subprocess.call

转载 作者:行者123 更新时间:2023-12-01 05:56:16 27 4
gpt4 key购买 nike

我有一个 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;

尽管在这里阅读其他类似的帖子( Call perl script from pythonHow to call a perl script from python?How can I get the results of a Perl script in Python script?Python getstatusoutput replacement not returning full output 等)和其他地方,我感觉我错过了一些明显的东西,但我无法弄清楚是什么。

有什么想法吗?

谢谢。

最佳答案

重定向<是一个shell功能。如果你想使用它,你需要将一个字符串传递给 subprocess.call并使用shell = True 。例如:

args = ['/usr/bin/perl', '/path/to/my/perl/script.pl', '<', '/path/to/my/input']
strOut = subprocess.call(' '.join(args), shell = True)

或者,您可以这样做:

args = ['/usr/bin/perl', '/path/to/my/perl/script.pl']
with open('path/to/my/input') as input_file:
strOut = subprocess.call(args, stdin = input_file)
<小时/>

最后,strOut将保存来自 Perl 程序的返回代码——这似乎是一个有趣的名字。如果您想从 Perl 程序获取输出流 (stdout),您可能需要使用 subprocess.Popenstdout=subprocess.PIPE 结合使用和communicate .

关于python - 从 python 调用 perl 脚本适用于commands.getstatusoutput 但不适用于 subprocess.call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496170/

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