如何在另一个脚本中运行Python脚本并立即关闭自身

时间:2018-11-20 10:41:55

标签: python pyqt5

我有一个登录框架和一个由pyqt制成的主框架。 我想在单击按钮后运行主命令,然后在主框架运行时关闭登录框架。

我为单击按钮编写了一个def,但是当命令执行时,主框架仍然等待,直到我关闭主窗口。

这是单击按钮的功能:

def ButtonClicked(self):

       os.system('py Main.py')
       self.os.exit()

如何使其立即关闭而不等待main.py退出?

1 个答案:

答案 0 :(得分:1)

不确定您的方法在这里是否最好,只是回答您的特定问题:os.system在这里不是正确的函数,因为它在继续调用之前等待调用的输出(您可能已经注意到了。) ..)。尝试“产生”一个进程,并告诉Python不要等待任何类似这样的结果:

os.spawnl(os.P_DETACH, 'py Main.py')

编辑

给出评论,我将稍微改变答案。要在“带路径”模式下使用spawnl,必须在末尾添加pspawnlp())。尽管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()