2017-10-23 14 views
1

私は、Linuxの端末から正常に動作しますpythonスクリプトを持っています。私は私が私のpythonスクリプトを実行するときshell scriptを使用してファイルへの端子の出力を収集することができています。スクリプトのターミナルログをファイルに取り込む方法は?

今私はpython script自体からの端子の出力を収集したいです。しかし、そうすることはできません。

class Tee(object): 
    def __init__(self, f1, f2): 
     self.f1, self.f2 = f1, f2 
    def write(self, msg): 
     self.f1.write(msg) 
     self.f2.write(msg) 

outfile = open('outfile', 'w') 

sys.stdout = outfile 
sys.stderr = Tee(sys.stderr, outfile) 

コードのこの部分python fileに:私は、私は私のpython fileで以下のように行われている任意のshellまたはunixスクリプト

を使用していないpythonを使用してこれを実行したい

出力ファイルにstderrstdoutの両方を出力します。

どのように私は、単一のファイルに端末全体の出力をキャプチャすることができます。

+1

あなたは「端末全体をキャプチャするとはどういう意味ですか出力"? 上記のコードは、すべてを 'outfile'に書き出しています。 '容易になるだろう|' contextlib.redirect_(標準エラー出力標準出力)を使用しているが 。 – YSelf

+0

@yself私のコードは 'print'文だけをファイルに出力しますが、' terminal'に表示されるすべてのログも同様にインクルードしたい –

答えて

1

あなたのPATHpythonがあることが必要な場合は、別のpythonプロセスを呼び出してメインスクリプトを実行します。トップレベルのスクリプトで

は、子プロセスで、ご希望のスクリプトを起動するためにsubprocess.Popenを使用しています。次に、subprocess.Popen.communicate()を使用して、プロセスからの出力ストリームを取得します(おそらく、コマンドライン引数をプロセスに渡します)。

あなたはPopenだけですべてのstd *出力をファイルにリダイレクトすることさえできるかもしれませんが、これは本当にあなたのニーズやその他に依存します。 communicate()は、あなたがしたいことがある場合には非常に便利です。

0

あなたのコード内でこのようなものを使用することができます:os.system('pdv -t %s > 123.txt' % epoch_name) をまた、このになります:Subprocess

関連する問題