gpt4 book ai didi

python - 在同一函数中的子进程调用之前运行 python 命令?

转载 作者:行者123 更新时间:2023-12-04 19:03:16 34 4
gpt4 key购买 nike

我正在使用 PyGTK 开发一个简单的应用程序。我有一个按钮,它在单击时在 ubuntu 中运行一个子进程。我想在单击按钮后更改状态栏一次,并在子进程完成时更改一次。但目前它不能正常工作,因为它等待子进程完成,然后只将状态栏更改为“完成”。我的代码现在是这样的:

def on_button_clicked(self, widget):
self.statusBar.push(1, "Doing the subprocess...")

command = '...'

print subprocess.call(command,shell=True)
...
self.statusBar.push(1, "Done!")

我以为我可以在另一个函数中更改状态栏,然后调用一个函数来完成其余的工作,但它不起作用(听起来很傻!)。当命令在后台运行时,我应该如何更改我的代码以显示“正在执行子进程...”状态?

最佳答案

如你所想,subprocess.call()阻塞直到命令完成。您要做的是在另一个线程中运行子进程调用,然后,一旦调用完成,从线程更新状态栏。

def _do_subproc(command, bar):
subprocess.call(command, shell=True)
glib.idle_add(bar.push, 1, "Done!") # call bar.push in the main GUI thread

def on_button_clicked(self, widget):
self.statusBar.push(1, "Doing the subprocess...")
command = '...'
threading.Thread(target=lambda: _do_subproc(command, self.statusBar)).start()

您可能希望使按钮变灰以防止用户以垃圾邮件方式点击它。

关于python - 在同一函数中的子进程调用之前运行 python 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26026902/

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