#python #python-3.x #pipe #fork
#python #python-3.x #канал #fork
Вопрос:
итак, я пытаюсь захватить вывод дочернего процесса, используя только fork / exec / pipe / dup2, но вместо этого вывод продолжает выводиться на терминал. Это мой код прямо сейчас:
import os
import sys
pipeIn, pipeOut = os.pipe()
processid = os.fork()
if processid == 0:
try:
os.close(pipeIn)
os.dup2(pipeOut, 0)
os.execv(sys.executable, [sys.executable, 'helloWorld.py'])
sys.exit(0)
except FileNotFoundError:
print("ERROR: File not found.")
sys.exit(1)
elif processid == -1:
print("ERROR: Child was unable to run.")
sys.exit(1)
else:
wait = os.wait()
if wait[1] == 0:
os.close(pipeOut)
output = os.read(pipeIn, 100)
else:
output = "ERROR"
Кто-нибудь может сказать мне, что происходит не так? И как я могу захватить вывод команды exec вместо того, чтобы печатать его на терминале. (Временные файлы также не разрешены).
Ответ №1:
Стандартный вывод — FD 1, но вместо этого вы используете dup
свой канал через FD 0 (стандартный ввод). Измените os.dup2(pipeOut, 0)
на os.dup2(pipeOut, 1)
.