Есть только две вещи, которые я бы добавил к ответу @Mark Rushakoff. При отладке я нашел действительно полезным изменить параметр buffering
моих вызовов open()
на 0.
sys.stdout = open(str(os.getpid()) + ".out", "a", buffering=0)
В противном случае, безумие , потому что при tail -f
в выходном файле результаты могут быть прерывистыми buffering=0
для tail -f
отлично.
И для полноты, сделайте себе одолжение и перенаправьте также sys.stderr
.
sys.stderr = open(str(os.getpid()) + "_error.out", "a", buffering=0)
Кроме того, для удобства вы можете сбросить это в отдельный класс процесса, если хотите,
class MyProc(Process):
def run(self):
# Define the logging in run(), MyProc's entry function when it is .start()-ed
# p = MyProc()
# p.start()
self.initialize_logging()
print 'Now output is captured.'
# Now do stuff...
def initialize_logging(self):
sys.stdout = open(str(os.getpid()) + ".out", "a", buffering=0)
sys.stderr = open(str(os.getpid()) + "_error.out", "a", buffering=0)
print 'stdout initialized'
Вот соответствующий гист