Перенаправить стандартный вывод одного Popen в другой Popen stdin - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь отправить выходные данные одного процесса в качестве входных данных другому процессу, используя следующий блок кода:

p1 = Popen(command, stdout=PIPE)
p2 = Popen(dgxmcmd, stdin=p1.stdout, stdout= PIPE, stderr = PIPE)
output = p2.communicate()[0]

Но p2 получает исключение, поскольку такого файла или каталога нет. Кажется, p1 stdout заканчивается.

Traceback (most recent call last):
File "/usr/bin/toolbox", line 160, in <module>
d.brokerProfile()
File "/usr/lib/python2.7/site-packages/toollib/deploy.py", line 340, in 
brokerProfile
self.dgxm(cmd1)
File "/usr/lib/python2.7/site-packages/toollib/deploy.py", line 327, in dgxm
p2 = Popen([dgxmcmd], stdin = p1.stdout, stdout = PIPE, stderr = PIPE)
File "/usr/lib64/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1024, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

В любом случае, чтобы выяснить, что здесь происходит? Заранее спасибо.

Дополнительная информация: dgxm - это сторонний инструмент, который принимает команды. Команды динамически генерируются из p1 и затем отправляются в p2 для выполнения с использованием стороннего инструмента.

1 Ответ

0 голосов
/ 04 июля 2018

вместо этого просто сделайте это

import os
p1 = os.popen(command)
p1=p1.read()
p2 = Popen(dgxmcmd, stdin=p1, stdout= PIPE, stderr = PIPE)
output = p2.communicate()[0]

, который должен работать, если нет дополнительной информации

...