Python-yad 进度条在 python 3.4 中不起作用,但在 python 2.7 中起作用
Python-yad Progress Bar not working in python 3.4 but works in python 2.7
我创建了一个 python interface for the yad 程序。代码基本上做的是,它生成一个字符串,该字符串使用 pythons subprocess
and/or pexpect
模块传递给 yad
程序并执行它
现在,我遇到了一个奇怪的错误,我试图显示一个简单的 [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
...
您可以使用print("{}/100".format(k), "\r", end="")
取消打印最后的%,然后打印更新的进度。
重新发布作为回答:
在包装器模块中,写入子进程的标准输入后调用p.stdin.flush()
。
在Python 2 中,默认是创建没有任何缓冲的Popen 管道(subprocess.Popen
的bufsize
参数默认为0)。这意味着您写入的任何数据都会立即发送到子进程。在Python3中,buffering是默认的(bufsize
默认为-1,也就是默认的buffer size)。因此,出于性能原因,数据会一直存储在内存中,直到缓冲区填满或您调用 flush。
我创建了一个 python interface for the yad 程序。代码基本上做的是,它生成一个字符串,该字符串使用 pythons subprocess
and/or pexpect
模块传递给 yad
程序并执行它
现在,我遇到了一个奇怪的错误,我试图显示一个简单的 [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
...
您可以使用print("{}/100".format(k), "\r", end="")
取消打印最后的%,然后打印更新的进度。
重新发布作为回答:
在包装器模块中,写入子进程的标准输入后调用p.stdin.flush()
。
在Python 2 中,默认是创建没有任何缓冲的Popen 管道(subprocess.Popen
的bufsize
参数默认为0)。这意味着您写入的任何数据都会立即发送到子进程。在Python3中,buffering是默认的(bufsize
默认为-1,也就是默认的buffer size)。因此,出于性能原因,数据会一直存储在内存中,直到缓冲区填满或您调用 flush。