Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python运行外部程序并独立地继续执行_Python_Cross Platform_Subprocess - Fatal编程技术网

python运行外部程序并独立地继续执行

python运行外部程序并独立地继续执行,python,cross-platform,subprocess,Python,Cross Platform,Subprocess,如何从python脚本运行外部程序,比如说“Firefox”,并确保其进程在python脚本终止后保持活动状态?如果可行的话,我想让它跨平台。只有stdlib没有跨平台的方法。但是,如果您为POSIX和Windows编写代码,通常就足够了,对吗 在Windows上,您希望传递一个参数。阅读文档(包括那里和),并决定是否需要控制台分离的进程、新的控制台进程或新的进程组进程,然后使用适当的标志。您可能还需要在startupinfo中设置一些标志;再一次,我会告诉你他们的意思 在POSIX上,如果您只

如何从python脚本运行外部程序,比如说“Firefox”,并确保其进程在python脚本终止后保持活动状态?如果可行的话,我想让它跨平台。

只有stdlib没有跨平台的方法。但是,如果您为POSIX和Windows编写代码,通常就足够了,对吗

在Windows上,您希望传递一个参数。阅读文档(包括那里和),并决定是否需要控制台分离的进程、新的控制台进程或新的进程组进程,然后使用适当的标志。您可能还需要在
startupinfo
中设置一些标志;再一次,我会告诉你他们的意思

在POSIX上,如果您只需要最简单的行为,并且您使用的是3.2+,那么您需要通过
start\u new\u session=True
。在早期的Python版本中,或者在其他情况下,您希望传递一个
preexec\u fn
,它允许您执行任何您想要的daemonization。这可能只有
os.setsid()
(启动新会话所做的),或者更多。请参阅,了解您可能希望在此处执行的所有不同操作的讨论

因此,最简单的版本是:

def launch_in_background(args):
    try:
        subprocess.CREATE_NEW_PROCESS_GROUP
    except AttributeError:
        # not Windows, so assume POSIX; if not, we'll get a usable exception
        p = subprocess.Popen(args, start_new_session=True)
    else:
        # Windows
        p = subprocess.Popen(args, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)


如果您愿意走出stdlib,那么有几十个“shell类型功能”库,其中许多具有某种“分离”功能。只需搜索,或者在PyPI上,找到你最喜欢的一个。

@jonjohnson:这是如何回答这个问题的,甚至与之相关?这里的问题是关于
os.system
的报价问题,答案是使用
subprocess.call
,它将阻止,直到子进程完成…相关: