我有一个登录框架和一个由pyqt制成的主框架。 我想在单击按钮后运行主命令,然后在主框架运行时关闭登录框架。
我为单击按钮编写了一个def,但是当命令执行时,主框架仍然等待,直到我关闭主窗口。
这是单击按钮的功能:
def ButtonClicked(self):
os.system('py Main.py')
self.os.exit()
如何使其立即关闭而不等待main.py退出?
答案 0 :(得分:1)
不确定您的方法在这里是否最好,只是回答您的特定问题:os.system
在这里不是正确的函数,因为它在继续调用之前等待调用的输出(您可能已经注意到了。) ..)。尝试“产生”一个进程,并告诉Python不要等待任何类似这样的结果:
os.spawnl(os.P_DETACH, 'py Main.py')
编辑
给出评论,我将稍微改变答案。要在“带路径”模式下使用spawnl
,必须在末尾添加p
(spawnlp()
)。尽管os.system和os.spawn **提供了基本功能,但是文档引用了子流程库以获得更好的控制。它使事情变得有些复杂,但是我认为这个示例可以满足您的要求:
import sys
import subprocess
# Constant for detaching a process
DETACHED_PROCESS = 0x00000008
# Start the process and get its PID
pid = subprocess.Popen(["python", "you_second_script.py"], close_fds=True, creationflags=DETACHED_PROCESS).pid
print(pid)
# The end of this script, the started process will continue
sys.exit()