我正在使用Python使用不同的输入运行较长的(4-60分钟的运行时间)Perl程序。Perl程序较旧,并且使用警告已注释掉。不同的输入使用代码的不同部分。
# use warnings FATAL => 'all';
当我从bash运行CMD时,所有输入都起作用!
perl -I/storage my_script_entance.pl --ex_config R....
某些输入在我使用Popen运行时崩溃:
run_script('perl -I/storage my_script_entance.pl --ex_config R....')
def run_script(cmd):
args = shlex.split(f'{cmd}')
# p = sp.Popen(args, stdout=sp.PIPE, stderr=sp.PIPE)
p = sp.Popen(args, stderr=sp.PIPE)
output, err = p.communicate()
print(f'output: {output}')
print(f'err: {err}')
rc = p.returncode
print(f"script return code: {rc}")
崩溃看起来像这样:
output: None
err: b''
script return code: -9
它们在代码中的许多不同地方都有表面
我的环境是:具有Alpine Docker容器的Kubernetes,具有:
为什么从Popen运行脚本与从bash运行脚本不同?有没有一种方法可以完全相同地运行它们。
我阅读了Popen文档,并尝试对此example使用带有check = False的运行功能。但无法读取输出错误管道。
我使用pexpect尝试了一些选项,但到目前为止失败了。
是否有一种方法可以像在bash中一样运行脚本,并仅打印标准输出和错误?
P.S
[我之所以使用Python启动Perl的原因在于高级的Kafka库(Perl Kafka库是片状且僵化的)] >>
我正在使用Python使用不同的输入运行较长的(4-60分钟的运行时间)Perl程序。 Perl程序较旧,并且使用警告已注释掉。不同的输入使用...