首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从持续运行的python运行一个新的进程/可执行文件

从持续运行的python运行一个新的进程/可执行文件
EN

Stack Overflow用户
提问于 2021-08-16 03:22:01
回答 1查看 133关注 0票数 0

我试着用Python做一些非常简单的事情,但没有成功。我想从python内部运行一个可执行文件,这样当调用python脚本退出时-已经启动的exe继续运行。也就是说,要在独立的进程中运行exe,就不需要在进程和创建进程之间进行任何进程间的通信。

Windows 10中当前的目标操作系统(不是linux,因此linux/unix解决方案不适用),但理想情况下,解决方案应该是独立于平台的。我尝试了两种不同的方法:使用subprocess.Popen()和os.system()

我一直未能找到任何“显而易见”的解决方案,或在同一主题的不同帖子中提出的解决方案。下面给出的各种尝试的列表-注释掉了。在这里,记事本只是用于测试-实际的可执行文件是不同的,并采取命令行args。

当python脚本退出时(在VS代码中),记事本就消失了。

代码语言:javascript
运行
复制
import os
import subprocess

# attempts using popen()
# ----------------------
popen_args = [r'C:\Windows\System32\Notepad.exe']

# subprocess.Popen(popen_args)

# subprocess.Popen(popen_args, shell=True)

# subprocess.Popen(popen_args, creationflags=subprocess.DETACHED_PROCESS)

# subprocess.Popen(popen_args, creationflags=subprocess.CREATE_NEW_CONSOLE)

# subprocess.Popen(popen_args, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, shell=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, close_fds=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, close_fds=True, shell=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, start_new_session=True)

# subprocess.Popen(popen_args, start_new_session=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, start_new_session=True, close_fds=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, start_new_session=True, close_fds=True, shell=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# subprocess.Popen(popen_args, shell=True, stdout=None, stdin=None)

# subprocess.Popen(popen_args, shell=True, stdout=None, stdin=None, start_new_session=True)

# subprocess.Popen(popen_args, close_fds=True, stdout=None, stdin=None, start_new_session=True)

# subprocess.Popen(popen_args, close_fds=True, stdout=None, stdin=None, start_new_session=True, creationflags=subprocess.DETACHED_PROCESS  | subprocess.CREATE_NEW_PROCESS_GROUP)

# attempts using os.system()
# --------------------------
# os.system(r'START "" C:\Windows\System32\Notepad.exe')

# os.system(r'START /b "" "C:\Windows\System32\Notepad.exe"')

有趣的是-运行系统“启动.”cmd控制台中的命令确实会导致记事本在主机cmd控制台关闭后继续进行。

我在很多不同的语言中都做过类似的操作--但在python中却遇到了困难。

更新

  • 一条评论链接到一篇建议使用'start_new_session‘选项的帖子--我不确定这是否仅仅是linux/unix --但不管是哪种方式,它都不能工作。我已经更新了上面的列表,以包括这些新的失败尝试--都不起作用。
  • 也基于另一条评论--我应该明确指出,这必须是非阻塞的,用阻塞呼叫来做这件事很容易,但不是我所需要的。调用进程需要在exe启动后继续,并在exe仍在运行的情况下正确退出。
EN

回答 1

Stack Overflow用户

发布于 2021-08-16 03:38:52

经测试及证明:

代码语言:javascript
运行
复制
import os
os.system("notepad")

这对我来说很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68797058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档