【问题标题】:How to run a Python script inside another script and close itself immediately如何在另一个脚本中运行 Python 脚本并立即关闭自身
【发布时间】: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') 运行控制台启动但没有弹出弹出窗口。我应该在任务栏上按它来显示

标签: python pyqt5


【解决方案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 的回答帮助我解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多