Я использую Python для запуска длинной (4-60 минут работы) Perl программы с разными входами. Программа Perl старая и с закомментированным предупреждением об использовании. Различные входы используют разные части кода.
# use warnings FATAL => 'all';
Все входы работают, когда я запускаю CMD с bash!
perl -I/storage my_script_entance.pl --ex_config R....
Некоторые входы cra sh, когда я их запускаю используя 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
они появляются в разных местах кода
Моя среда: Kubernetes с Alpine Docker контейнеры с:
- perl5 (версия 5, версия 30 subversion 1)
- Python 3.8.2
Почему сценарии запускаются из Чем отличается popen от запуска скриптов от bash? Есть ли способ запустить их одинаково.
Я прочитал документацию Popen и попытался использовать функцию запуска с check = False с этим примером . но не смог прочитать выходные сообщения об ошибках.
Я попробовал некоторые опции, используя pexpect, но пока не получилось.
Есть ли способ запустить сценарии, как в bash, и просто напечатать стандартный вывод и ошибка?
PS
Я использую Python для запуска Perl из-за превосходной библиотеки Кафки (Perl Библиотека Кафки является нестабильной и жесткой)