2017-05-19 28 views
-1
with open('WarningErr.txt', 'w') as err: 
    subprocess.call(cmd, stderr=err) 

with open('WarningOut.txt', 'w') as out: 
    return_code = subprocess.call(cmd, stdout=out) 

今、私は両方のエラーと出力を ".txtとstdout"で書きます。Python - ファイルとコンソールの両方を同時に書き込む方法(Bashファイルから)

しかし、それは遅すぎます。私は1つで、次に別の人に書きます。 私は同時に両方で書くことができなければなりません。

BashのTシャツの動作を少し複製します。

+0

'サブプロセス 'を使って呼び出すコマンドに' tee'を含めないでください。 –

+0

これはあなたにとって役に立ちます:[いつものようにpythonのサブプロセス出力stdoutとstderrを作ることができますが、出力を文字列として取り込めますか? \ [duplicate \]](http://stackoverflow.com/q/12270645/953482) – Kevin

+0

サブプロセス呼び出し@Rightlegでうまくいきました –

答えて

0

@Rightlegのようなコマンド呼び出しにteeが含まれています。私はコマンドを変更します。しかし、今は完全に動作します。

サブプロセスを介してteeを呼び出すことはできませんでした。しかし、それは本当にうまくいく!

# for example 
command = 'ls' 

# To write at the same time in the shell and a file both errors, and stdout (TEE behaviour) 
cmd = ['bash', '-c', '. myBash.bash; {} > >(tee {}/WarningOut.txt) 2> >(tee {}/WarningErr.txt >&2)' 
     .format(command, PATHTOWHEREYOUWANTIT_g, PATHTOWHEREYOUWANTIT_g)] 

return_code = subprocess.call(cmd) 
+0

他の人に役立つように最終的なコードを追加してくださいユーザーですか? :) –

0

stdout/stderrとファイルにログします。ロギングライブラリとこのコードを試してください:

import logging 

# create logger obj 
_glogger = logging.getLogger("myApp") 

# create file sink 
hdlr = logging.FileHandler(os.path.join("dumpDir",'myApp.log')) 
formatter = logging.Formatter('%(asctime)s %(name)s[%(process)d] %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
_glogger.addHandler(hdlr) 

# create steam sink = stdout 
hdlr2 = logging.StreamHandler() 
hdlr2.setFormatter(formatter) 
_glogger.addHandler(hdlr2) 
_glogger.setLevel(logging.DEBUG) 

_glogger.debug("a debug message") 
+0

はい、それは私が最終的に試してみなければならないものです。 –

関連する問題