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

Posted

技术标签:

【中文标题】如何在另一个脚本中运行 Python 脚本并立即关闭自身【英文标题】:How to run a Python script inside another script and close itself immediately 【发布时间】:2018-11-20 10:41:55 【问题描述】:

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

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

这是点击按钮的功能:

def ButtonClicked(self):

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

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

【问题讨论】:

start "" py Main.py 我不明白什么是开始 os.system('start "" py Main.py') @PeterWood 非常感谢它的工作,但我有一个小错误,即 os.system('start "" py Main.py') 运行控制台启动但没有弹出弹出窗口。我应该在任务栏上按它来显示 【参考方案1】:

不确定您的方法是否在这里最好,但只是回答您的具体问题:os.system 在这里不是正确的功能,因为它在继续之前等待调用的输出(您可能已经注意到... )。尝试“生成”一个进程并告诉 Python 不要等待任何结果,如下所示:

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

编辑

鉴于 cmets,我会稍微改变一下答案。要在“带路径”模式下使用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()

【讨论】:

os.spawnl 不使用PATH 定位py 感谢您的回答,但@PeterWood 的回答帮助我解决了这个问题

以上是关于如何在另一个脚本中运行 Python 脚本并立即关闭自身的主要内容,如果未能解决你的问题,请参考以下文章

停止在另一个 Python 脚本中运行的一个 Python 脚本

unity脚本中变量在另一个脚本如何调用

如何在命令行里运行python脚本

gnome 终端:找不到目录(在另一个终端中运行 python 脚本)

使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本

无法在另一个 python 脚本中使用来自 python 函数的属性