【问题标题】:Python - How to launch a subprocess before exiting the program (which is running on a detached screen)?Python - 如何在退出程序(在分离的屏幕上运行)之前启动子进程?
【发布时间】:2014-08-12 12:05:59
【问题描述】:

出于某种原因,我想在退出当前脚本之前启动一个脚本。我找到了一种简单的方法:

script1.py:

#**
#some code
#**
p=subprocess.Popen(["python", "script2.py"])

这样,如果我运行 script1,它将在退出前最后启动 script2。

但是,如果我在屏幕中运行 script1(屏幕 python script1.py),屏幕将在 script2 有机会启动之前终止。

此外,由于 script2 很长,我不想等它结束后再退出 script1。有没有办法做到这一点?也许通过在另一个屏幕上启动 script2?如果是这样,我该怎么做?

【问题讨论】:

    标签: python linux subprocess gnu-screen


    【解决方案1】:

    您可以创建第二个脚本,然后等待它完成

    p=subprocess.Popen(["python", "script2.py"])
    p.wait()
    

    或者更优雅的是,您可以使用os.execv 将您的python 解释器替换为新的解释器(PID 将保持不变,您将保留控制台)。

    os.execv("/usr/bin/python", ["/usr/bin/python", "script2.py"])
    

    【讨论】:

    • 我喜欢你的 os.execv 想法,但是如果我理解了这个函数,它在 script1 中的子进程调用之后不会执行任何东西?例如,如果我在子进程调用之后和 script1 退出之前有 print "script2 has been launched" 之类的东西,它们将不会被执行?
    • 就是这样,不会打印消息:你的进程会死掉并被新的进程替换,这个系统调用之后什么都不会执行。
    • 谢谢,这正是我正在寻找的,我会在这之前运行我想要运行的一些东西,然后就可以了!
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 2017-05-16
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多