Pythonyad进度条在python3.4中不起作用,但在python2.7中有效

2024-09-29 21:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我为yad程序创建了一个python interface。该代码的基本功能是生成一个字符串,该字符串使用pythonssubprocess和/或pexpect模块传递给yad程序并执行它

现在,我遇到了一个奇怪的bug,我试图显示一个简单的[multi]进度条,并用如下的某个值更新该条:

import yad, time

yad = yad.YAD()

x = yad.Progress(autoclose=True) # yad.MultiProgress(autoclose=True)

for i in range(0,105,5):
  print(i)
  x(i,msg=str(i)+"% done")
  time.sleep(0.5)

问题是,在Python2.7中,它工作得很好(更新条,并在wards之后关闭),但在Python3.4中,它不工作(显示条,但不更新,即使for循环打印数字)。在

我想弄清楚我的接口有什么问题。函数的编写方式应该是更新bar,但由于某些原因,它在python3.4中不起作用。在

请帮我解决这个问题。我不知道窃听器在哪里。在

Edit:x是一个函数,当我们调用yad.Progress()时,它作为输出返回。使用x,我们可以向yad写入一些标准输入。代码的shell等价物如下所示:

^{pr2}$

Tags: 模块函数字符串代码程序truefortime
2条回答

您可以使用print("{}/100".format(k), "\r", end="")取消打印最后一个%然后打印更新的进度。在

作为回答:

在包装器模块中,在写入子进程的stdin之后调用p.stdin.flush()。在

在Python2中,默认值是创建没有任何缓冲区的Popen管道(bufsizebufsize参数默认为0)。这意味着您编写的任何数据都会立即发送到子进程。在Python3中,缓冲是默认的(bufsize默认为-1,这意味着默认的缓冲区大小)。因此,出于性能原因,数据存储在内存中,直到缓冲区填满或调用flush。在

相关问题 更多 >

    热门问题