2017-07-25 5 views
0

Ich habe ein Python-Skript, dessen Ausgabe Pipe in eine Protokolldatei ist. Ich kann die Datei von innen mit einem Aufruf von os.exec neu starten, aber wenn ich das tue, schreibt der neue Prozess seine Ausgabe nicht in der Protokolldatei. Wie kann ich die Ausgabeumleitung beibehalten, nachdem ich den Prozess neu gestartet habe?Umleiten der Ausgabe in Datei nach os.exec *

Mein Skript Start:

python3.6 script.py >> home/pi/log/telegram_bot.log 2>&1 & 

Meine Neustart Linie:

import os 
import sys 
os.execv(sys.executable, [sys.executable] + sys.argv) 
+0

Warum verwenden Sie os.execv und nicht Subprozess? – Alan

+0

@Alan sie dienen verschiedenen Zwecken: Subprozess spawns einen Kind-Prozess (so dass Sie w/zwei) und exec wandelt den aktuellen Prozess in den neuen Prozess. @Nexxurs, ich glaube nicht, dass die [exec * '] (https://docs.python.org/3.6/library/os.html#process-management) -Familie eine Schnittstelle zum Umleiten von Streams bietet. Aber warum sollten Sie Ihren Prozess ausführen, anstatt nur Ihre Hauptfunktion erneut aufzurufen? – Will

+0

Dies wird [hier] beantwortet (https://stackoverflow.com/questions/8500047/how-to-inherit-stdin-and-stdout-in-python-by-using-os-execv) – user2722968

Antwort

0

ich dieses Problem nicht reproduzieren kann. Hier ist mein first.py:

import os 
import sys 
os.execv(sys.executable, [sys.executable, "second.py"]) 

hier second.py:

print("Hello") 

Hier ist, wie ich es starten und das Ergebnis überprüfen. Wie Sie sehen können, funktioniert es gut:

$ python first.py >> logfile 2>&1 & 
[1] 3098 
$ wait 
$ cat logfile 
Hello 
Verwandte Themen