如何在另一个脚本中运行 Python 脚本并立即关闭自身
Posted
技术标签:
【中文标题】如何在另一个脚本中运行 Python 脚本并立即关闭自身【英文标题】:How to run a Python script inside another script and close itself immediately 【发布时间】:2018-11-20 10:41:55 【问题描述】:我有一个登录框架和一个由 pyqt 制成的主框架。 我想在单击按钮后运行主命令,当主框架运行时关闭登录框架。
我为单击按钮编写了一个定义,但是当命令执行时,主框架仍然等到我关闭主窗口。
这是点击按钮的功能:
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 脚本
gnome 终端:找不到目录(在另一个终端中运行 python 脚本)