【问题标题】:Python run system command and then exit... won't exitPython运行系统命令然后退出...不会退出
【发布时间】:2011-07-24 13:41:02
【问题描述】:

我有以下 python 代码:

os.system("C:/Python27/python.exe C:/GUI/TestGUI.py")
sys.exit(0)

它可以正常运行命令,并弹出一个窗口。但是,它不会退出第一个脚本。它只是停留在那里,我最终不得不强制终止该过程。不会产生错误。怎么回事?

【问题讨论】:

  • 问题是os.system(command)函数阻塞直到命令完成运行,OP想要的是运行命令而不等待它完成。
  • @Dan 没错!我才意识到这就是问题所在。由于 python 脚本正在运行,它仍然存在于“shell”中,os.system 必须等到 shell 退出。我该怎么做?
  • subprocess 应该可以工作,但 docs.python.org 似乎已关闭……here 是一面镜子。

标签: python exit


【解决方案1】:

subprocess.Popen代替os.system

这会运行一个命令并且不等待它然后退出:

import subprocess
import sys

subprocess.Popen(["mupdf", "/home/dan/Desktop/Sieve-JFP.pdf"])
sys.exit(0)

注意os.system(command) 喜欢:

p = subprocess.Popen(command)
p.wait()

【讨论】:

  • 如果您在终端窗口内运行最顶层的脚本,即使退出脚本和cmd.exe 本身,您也可能会遇到此窗口一直打开的情况!.. 我已经如果您从该窗口内启动一些后台进程,就会注意到这种情况。这些进程退出后,窗口确实关闭。
【解决方案2】:

键盘中断和信号只有进程(即主线程)才能看到。如果您的嵌套命令由于某种文件读取或写入块而挂起,您将无法使用任何键盘命令退出程序。

Why does a read-only open of a named pipe block?

如果您无法消除磁盘块的来源,那么一种方法是将进程包装在线程中,以便您可以强制杀死它。但是如果你这样做,你就会给磁盘上写一半和损坏的文件留下机会。

【讨论】:

    【解决方案3】:

    我建议使用os._exit 而不是sys.exit,因为 sys.exit 不会退出程序但会引发异常级别或退出线程。 os._exit(-1) 退出整个程序

    【讨论】:

      【解决方案4】:
      import sys ,subprocess
      
      subprocess.Popen(["C:/Python27/python.exe", "C:/GUI/TestGUI.py"])
      sys.exit(0)
      

      从子进程模块中打开您要查找的内容。

      【讨论】:

        猜你喜欢
        • 2014-04-25
        • 1970-01-01
        • 2019-01-26
        • 2017-12-02
        • 2019-10-01
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        相关资源
        最近更新 更多