gpt4 book ai didi

python - 为什么这个带有线程的 Popen 不起作用?

转载 作者:行者123 更新时间:2023-12-04 23:14:24 30 4
gpt4 key购买 nike

我写了一个小 tkinter GUI 来处理 ffmpeg 的 4 个输入。由于子流程需要一些时间,我想对流程进行状态。因此,我使用线程,因此 tkinter 在执行子进程时不会卡住。

我的问题是,通过线程化 ffmpeg 命令会输出 0kb 的目标文件,并且不再向该文件写入任何内容。如果我在没有线程的情况下使用我的函数,一切正常,但 GUI 卡住。

这是代码的主要部分:

def ffmpeg(v0,v1,v2,v3):
cmd = [ path+'ffmpeg.exe',"-y","-i",v0,"-i",v1,"-i",v2,'-i',v3,'-filter_complex',"[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack,format=yuv420p[v]",'-map',"[v]","out.mp4"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
output = process.stdout.readline()
inpu = process.stderr.readline()
if output == b'' and process.poll() is not None:
break
if output:
print(output.strip()) # HERE i will insert into tkinter textfield
rc = process.poll()

def buttonClick(v0,v1,v2,v3):

#ffmpeg(v0,v1,v2,v3) # This line works
t = threading.Thread(target=ffmpeg,args=(v0,v1,v2,v3,)) #This doesn't work
t.start()
#t.join()

#tkvar list elements are absolute paths to the videofiles
submitButton = Button(mainframe, text="Process Video", command=lambda: buttonClick(tkvar[0].get(),tkvar[1].get(),tkvar[2].get(),tkvar[3].get()))
submitButton.grid(row = 7, column =3)

为什么我的线程不起作用?

最佳答案

问题是
process.stdout.readline()
始终为空,因为 ffmpeg 始终将所有内容写入 stderr。

关于python - 为什么这个带有线程的 Popen 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170019/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com