2017-07-25 12 views
0

私はpythonスクリプトを持っています。その出力はログファイルにパイプされています。私はos.exec呼び出しでファイルを再起動することができますが、そうした場合、新しいプロセスはその出力をログファイルに書き出しません。プロセスを再起動した後、どのように出力リダイレクションを保持できますか?os.execの後に出力をファイルにリダイレクト*

私のスクリプトの開始:

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

マイリスタートライン:

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

サブプロセスではなくos.execvを使用している理由は何ですか? – Alan

+0

@Alan彼らはさまざまな目的を果たします:サブプロセスは子プロセスを生成し(2つのままにしておきます)、execは現在のプロセスを新しいプロセスに変換します。 @Nexxurs、私は['exec *'](https://docs.python.org/3.6/library/os.html#process-management)ファミリーがストリームをリダイレクトするためのインターフェースを提供しているとは思わない。しかし、あなたの主な機能をもう一度呼び出すのではなく、なぜあなたのプロセスを実行するのが面倒なのでしょうか? – Will

+0

これはこちら[こちら](https://stackoverflow.com/questions/8500047/how-to-inherit-stdin-and-stdout-in-python-by-using-os-execv) – user2722968

答えて

0

私はこの問題を再現することはできません。ここに私のfirst.pyです:

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

はここsecond.pyです:

print("Hello") 

ここで私はそれを実行し、結果を確認する方法です。ご覧のとおり、正常に動作します。

$ python first.py >> logfile 2>&1 & 
[1] 3098 
$ wait 
$ cat logfile 
Hello 
関連する問題