python进度条怎么写_Python:向fi写入进度条

我有一个python脚本,作为它的一部分,它运行一个perl脚本。我使用subprocess模块执行并捕获stdout和{};伪代码是:import subprocess as sp

import sys

perl_script='/usr/.../foo.pl'

p = sp.Popen(perl_script,stdout=sp.PIPE,stderr=sp.PIPE)

fname='test.log'

shell_out=True

text = ''

with open(fname, 'w') as log:

while True:

data = p.stdout.read(1)

if data == '' and p.poll() != None:

break

if data != '':

if shell_out is True:

sys.stdout.write(data)

sys.stdout.flush()

log.write(data)

p.stdout.close()

对于循环的每次迭代,数据似乎是一个字符串字符。在

我遇到的问题是,这个perl脚本显示一个它覆盖的进度条;类似于:

^{pr2}$

每5%更新一次。因此,我要写入的日志文件的内容大致如下:[#.........] 5% [##........] 10% [###.......] 15%

等等。在

有没有一种方法或方法可以重写日志文件中的前一行,或者我唯一的选择是捕获所有文本,尝试修改它,然后将其写入日志文件?在

编辑:我认为我举的例子的简单性质可能无法说明整个故事。这个perl脚本有多个进度条(每个任务一个进度条),并输出我想要记录的附加信息。一个更详细的例子是:NOTICE: one or more of things did stuff and you probably want to take note of it

writing the foo file . . .

writing things . . . [####################] 100%

writing stuff . . . [####################] 100%

writing items . . . [####################] 100%

done

creating other files...

done

请记住,上面的输出是一个与这个perl脚本的stdout特性相匹配的示例,而实际输出(我无法发布)大约是100行左右。在

最后,感谢您的格式化帮助:)

编辑2:我已经放弃了在stdout被捕获时写入日志文件的尝试,而是将stdout存储在变量中,并在脚本完成后写入日志文件。剩下的唯一问题是如何正确格式化字符串,以便正确写入日志文件。更新的伪代码是:import subprocess as sp

import sys

tg_post='/usr/.../foo.pl'

p = sp.Popen(tg_post,stdout=sp.PIPE)

text = ''

fname='test.log'

shell_out=True

while True:

data = p.stdout.read(1)

if data == '' and p.poll() != None:

break

if data != '':

if shell_out is True:

sys.stdout.write(data)

sys.stdout.flush()

text += data

p.stdout.close()

text = text.split('\r')

with open(fname, 'w') as log:

log.write(text)

此时,此代码将为每个状态栏的每个百分比生成一行。我想我可以循环遍历文本中的每个索引(post split),并删除一个索引,其中有一个#而不是100%,但我希望有更健壮的索引。如果我print text(post split),我会在屏幕上看到我想要的。我知道可以使用print来写入文件,但我想避免这种情况(我相信不再使用这种方法)。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值