gpt4 book ai didi

Python - 如何为 subprocess.run sdterror 输出添加时间戳前缀?

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:14 27 4
gpt4 key购买 nike

我想为 subprocess.run 的 sdterror 输出加上时间戳作为前缀,不幸的是我还没打算弄清楚如何做到这一点。

我的 shell 脚本的这一部分运行 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() 调用中为每个新行添加时间戳前缀吗?

编辑:

需要明确的是,我想要在每行的开头有一个时间戳,这是我使用 log 得到的结果

这是我的日志记录代码:

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

最佳答案

您希望将每次执行记录在一个单独的、以时间戳命名的文件中。

首先,请注意文件名中最好避免使用 :。 Windows 无法接受这一点,而您需要可移植性。所以我改变了格式。

基本上,很简单:

  • 计算时间戳以捕获开始日期
  • 运行进程
  • 写入名称中包含时间戳的日志文件

代码:

try:
timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H_%M_%S")
conform_result = subprocess.run(ffmpeg_conform, stdout=PIPE, stderr=PIPE, universal_newlines=True)
log_file = os.path.join(config.transcode_logs,"c_{}_{}_detail.txt".format(timestamp,task_id))
with open(log_file,"w") as c_log:
c_log.write(conform_result.stderr)

except Exception as e:
print('task {} has failed for the following reason: {}'.format(task_id,e))

关于Python - 如何为 subprocess.run sdterror 输出添加时间戳前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com