【发布时间】:2021-04-21 04:53:57
【问题描述】:
我正在尝试在 Python2.7 中添加基于经过时间的进度条。基本上,我正在从 python 执行一个 bash 脚本,大约需要 90 分钟才能完成,但是被调用的底层应用程序并不经常提供信息。大约有 45 分钟,用户不会看到任何事情发生,我不希望他们认为进程已冻结而终止脚本。因为我知道可执行文件大约需要多长时间才能完成,所以我想根据经过的时间添加一个进度条。这是我目前所拥有的:
def sys_call(self, cmd, log_file="prog.log"):
# setup toolbar and start timer
start = datetime.datetime.now()
stdo = sys.stdout
msg = "elapsed {}".format(datetime.timedelta())
stdo.write(msg)
stdo.write("\b"*len(msg)) # go to beginning of line
stdo.flush() # flush buffer
# initiate command and monitor
log = open(log_file, 'w')
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
for line in iter(process.stdout.readline, ''):
log.write(line.decode('utf-8'))
# display toolbar
msg = "elapsed {}".format(datetime.datetime.now() - start)
stdo.write(msg)
stdo.write("\b"*len(msg)) # go to beginning of line
stdo.flush() # flush buffer
log.close()
我正在寻找一种方法来根据经过的时间更新终端中的进度。上面的line 循环在脚本执行后停止循环很长一段时间,因为应用程序停止向stdout 发送任何内容,所以我经过的时间停止更新,这是一种误导。我可以计算并打印一个百分比,让用户看到进程没有被冻结,但我不确定如何在单独的线程中运行经过的时间代码。
我查看了progressbar 和tqdm,但很遗憾,由于我无法控制的要求,我无法使用第三方软件包。
【问题讨论】:
标签: python python-2.7