我为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等价物如下所示:
您可以使用
print("{}/100".format(k), "\r", end="")
取消打印最后一个%然后打印更新的进度。在作为回答:
在包装器模块中,在写入子进程的stdin之后调用
p.stdin.flush()
。在在Python2中,默认值是创建没有任何缓冲区的Popen管道(
bufsize
的bufsize
参数默认为0)。这意味着您编写的任何数据都会立即发送到子进程。在Python3中,缓冲是默认的(bufsize
默认为-1,这意味着默认的缓冲区大小)。因此,出于性能原因,数据存储在内存中,直到缓冲区填满或调用flush。在相关问题 更多 >
编程相关推荐