1

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

现在,我面临一个奇怪的错误,我试图显示一个简单的 [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)

问题是,在 python 2.7 中,它工作正常(更新栏,并在病房后关闭),但是当涉及到 python 3.4 时,它不起作用(显示栏,但不更新,即使for循环打印号码)。

我试图弄清楚我的界面有什么问题。这些函数的编写方式是,它应该更新栏,但由于某种原因,它在 python 3.4 中不起作用。

请帮我解决这个问题。我无法弄清楚错误在哪里。

编辑 :x是一个函数,当我们调用yad.Progress(). 使用x,我们可以向 yad 写入一些标准输入。代码的 shell 等效项是这样的:

yad --progress --auto-close
> 5
> # 5% done 
...
4

2 回答 2

2

转发作为答案:

在包装模块内部,p.stdin.flush()在写入子进程的标准输入后调用。

在 Python 2 中,默认是创建没有任何缓冲的 Popen 管道(bufsize参数subprocess.Popen默认为 0)。这意味着您写入的任何数据都会立即发送到子进程。在 Python 3 中,缓冲是默认设置(bufsize默认为 -1,表示默认缓冲区大小)。因此,出于性能原因,数据存储在内存中,直到缓冲区填满或调用刷新。

于 2016-02-18T14:17:39.880 回答
0

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

于 2016-02-18T04:04:45.143 回答