python2.6.6: как перенаправить вывод дочернего процесса os.fork () в файл журнала? - PullRequest
0 голосов
/ 30 января 2019

Приведенная ниже модель программы печатает только выходные данные своего родительского PID в файл «1.log».почему он не печатает вывод дочернего PID в 1.log.

Я не смог найти ответ при поиске в Google.

from __future__ import print_function 
import sys
import os


def main():

    class Logger(object):
        def __init__(self):
            self.log = open("1.log", "w")

        def write(self, message):
            self.log.write(message)  

    sys.stdout = Logger()

    def test():
        cmd = 'ver'
        print("1. Running command:",cmd)
        print('2. Done')                    

    pid = os.fork()

    if pid != 0 :
        child1 = pid
        print("This is parent")
        test()

    else:
        print("This is Child")
        test()
        os._exit(0)


    os.waitpid(child1, 0)

if __name__ == "__main__":
    main()

После запуска вышеуказанной программы

Я ожидал, что результат будет такой:

Ожидается1. содержимое файла журнала:

Это родитель 1. Выполняемая команда: ver 2. Выполнено Это дочерний 1. Запущенная команда: ver 2. Выполнено

, но фактический результат равен

1.log содержит:

Это родитель 1. Выполнение команды: ver 3. Готово

Может кто-нибудь сказать мне, что нужно сделать, чтобы получить содержимое файла 1.log, как указано выше(как указано в Expected 1.log file content:)?

...