subprocess.runからのsdterror出力にタイムスタンプを付加したいのですが、残念ながら私はその方法を理解していません。Python - subprocess.runにsdterror出力の前にタイムスタンプを付けるにはどうすればいいですか?
私のシェルスクリプトのこの部分は、FFMPEGを実行し、ログファイルに出力を書き込みます。
try:
conform_result = subprocess.run(ffmpeg_conform, stdout=PIPE, stderr=PIPE, universal_newlines=True)
print(conform_result.stderr)
c_log = open(config.transcode_logs + 'c_' + task_id + '_detail.txt', 'w')
c_log.write(conform_result.stderr)
c_log.close()
except Exception as e:
print('task ' + task_id + ' has failed for the following reason: ' + e)
私はこれに多くの研究を行っていると私は何を私から、解決策を見つけるように見えることはできませんreadingです。.runはサブプロセスを実行するために推奨される方法です。
私はタイムスタンプを作成する方法を知っている:
str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S"))
誰かが私はsubprocess.run()呼び出しからそれぞれ新しい行にタイムスタンプを前に付けるだろうか説明できますか?
EDIT:
ちょうど私がここでは、各行の先頭にタイムスタンプをしたい明確にするためには、私はここでlog
を使用して取得していますものですが、私のlogging
コードです:
file_log = logging.getLogger()
file_log.setLevel(logging.DEBUG)
fh = logging.FileHandler(filename=task_log + 'task_' + task_id + '.txt')
formatter = logging.Formatter(fmt='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
fh.setFormatter(formatter)
file_log.addHandler(fh)
# Conform section.
ffmpeg_conform_cmd, seg_number = functions.parse_xml(core_metadata_path, processing_temp_conform, base_mp4)
ffmpeg_conform = str(ffmpeg_conform_cmd).replace('INPUT_FILE', conform_source)
print(timestamp() + ': ' + ffmpeg_conform)
logging.info(ffmpeg_conform)
# Updated database stating that the conform process has started
sql_conform = "UPDATE task SET status ='Conforming' WHERE task_id ='" + task_id + "'"
cursor.execute(sql_conform)
dbc.commit()
try:
conform_result = subprocess.run(ffmpeg_conform, stdout=PIPE, stderr=PIPE, universal_newlines=True)
print(timestamp() + ': ' +conform_result.stderr)
file_log.info(conform_result.stderr)
except Exception as e:
print(timestamp() + ': Conform has Failed: ' + task_id)
print(e)
file_log.error('Conform has Failed: ' + task_id)
file_log.error(e)
問題はconform_result.stderr
が文字列であり、行単位で追加できないと思いますが、これはケースですか?
ところで私は、あなたが独立し、タイムスタンプという名前のファイル内の各実行をログに記録したいのpython 3.5
代わりに 'Popen'を使用し、行を1つずつタイムスタンプします。それはうまくいくでしょう。 –
私は 'Popen'を使ってみましたが、私はタイムラインで各行を追加することに失敗しています。あなたはこれについてどうやって行きますか? – Lewis909
私は答えましたが、今はあまりよく分かりません。あなたはそれぞれのpopenの後にファイルを開くべきではありません。そうしないと、以前の内容は破棄されます。あなたは、各行の日付が正しいファイルを1つだけ必要としますか? –