2017-02-21 18 views
0

Я использую подпроцесс для запуска другого файла python, который время от времени ломается. Я хочу записать данные из вывода (PyCharm) и сохранить его в текстовом файле, чтобы потом узнать, в чем проблема. Например:Выходной аварийный журнал в txt-файл

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 1254, in do_open 
    h.request(req.get_method(), req.selector, req.data, headers) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1106, in request 
    self._send_request(method, url, body, headers) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1151, in _send_request 
    self.endheaders(body) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1102, in endheaders 
    self._send_output(message_body) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 934, in _send_output 
    self.send(msg) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 877, in send 
    self.connect() 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 849, in connect 
    (self.host,self.port), self.timeout, self.source_address) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/socket.py", line 711, in create_connection 
    raise err 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/socket.py", line 702, in create_connection 
    sock.connect(sa) 
ConnectionRefusedError: [Errno 61] Connection refused 

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

sub = subprocess.Popen([sys.executable,...]) 

if sub.poll() is None: 

    os.system("screencapture -x crash.png") 
    file = open('log.txt', 'w') 

    #file.write() the output 

    start_process() #restarts the subprocess 

ответ

0

Я думаю, что это должен делать то, что вы хотите

with open('log_file', 'w') as f: 
    sub = subprocess.Popen(..., subprocess.STDOUT=f) 
    retval = sub.wait() 
    if retval != 0: 
     start_process()