启动另一个程序,在脚本结束时让它继续运行

2024-10-01 13:42:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用子流程.Popen启动一个带有参数的外部程序,但当我打开它时,脚本挂起,等待程序完成,如果我关闭脚本,程序将立即退出。在

我以前以为我只是用了一个类似的过程,没有问题,所以我不确定我是否真的做错了,或者我记错了Popen能做什么。这就是我的命令:

    subprocess.Popen(["rv", rvFile, '-nc'])
    raw_input("= Opened file")

原始的_输入部分只在那里,所以用户有机会看到消息并知道应该现在打开文件。但我最终得到的是进程本身吐出的所有信息,就好像在命令行中直接调用了它一样。我的理解是,Popen将它作为一个独立的子进程,允许我关闭脚本,而让另一个进程保持打开状态。在

对于我的目的来说,链接的重复问题确实有一个有用的答案,尽管它仍然没有按照我想要的那样工作。在

This is the answer.我就是这样更改代码的:

^{pr2}$

它可以在空闲状态下工作,但当我通过命令提示符样式的界面运行py文件时就不行了。它仍然绑定到那个窗口,打印输出并在我运行脚本后立即退出程序。在


Tags: 文件命令程序脚本参数进程过程状态
3条回答

stackoverflow问题Calling an external command in python有很多相关的有用答案。在

看看^{},它可以有很多模式标志,包括NOWAIT,WAIT。在

import os
os.spawnl(os.P_NOWAIT, 'some command')

NOWAIT选项将返回派生任务的进程ID。在

很抱歉这么简短的回答,但我还没有赢得足够的分数来发表评论。无论如何,把raw_input("= Opened file")放在实际打开的文件中,而不是放在打开它的程序中。在

如果您要打开的文件不是python文件,那么它将在完成时关闭,而不管您从python中声明什么。如果是这种情况,您可以尝试使用以下方法将其与父对象分离:

from subprocess import Popen, CREATE_NEW_PROCESS_GROUP
subprocess.Popen(["rv", rvFile, '-nc'], close_fds = True | CREATE_NEW_PROCESS_GROUP)

这是专门用于将python脚本作为命令行进程运行的,但我最终通过组合人们建议的两个答案来实现这一点。在

使用this answer中建议的分离进程组合可以通过IDLE运行它,但是命令行接口。但是使用shell=True(正如ajsp建议的那样)分离的_进程参数,它允许我关闭python脚本窗口,让另一个程序仍在运行。在

DETACHED_PROCESS = 0x00000008
pid = subprocess.Popen(["rv", rvFile, '-nc'], creationflags=DETACHED_PROCESS, shell=True).pid
raw_input("= Opened file")

相关问题 更多 >