当前位置: 首页 > 面试题库 >

从Python启动完全独立的进程

乌翔
2023-03-14
问题内容

我正在尝试从python启动一个完全独立的进程。我不能使用像os.startfile这样的简单内容,因为我需要传递参数。目前,我正在使用subprocess.popen,它可以让我90%地到达那里。

args = ["some_exe.exe", "some_arg", "another_arg"]
subprocess.Popen(args, creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

将带有分离的创建标志和管道的popen用于std
*确实会启动一个新进程,该进程在父进程死后仍然存在。这样就很好。问题在于,新的“子级”进程仍然为父级保留一个幻像句柄。因此,如果我尝试卸载父exe(我的python脚本通过pyinstaller捆绑到exe中),则msiexec抱怨父exe仍在使用中。

因此,目标是产生一个完全独立的进程来运行“ some_exe.exe”,而该进程没有返回原始进程的任何句柄。

注意:这适用于Windows XP及更高版本。我正在Win7上开发。


问题答案:

我想我找到了答案。通过Popen与with一起使用,close_fds = True我可以启动一个独立且没有父级处理的过程。

对于文档,请点击此处并搜索close_fds

或者,在Windows上,如果close_fds为true,则子进程将不会继承任何句柄。请注意,在Windows上,不能将close_fds设置为true,也不能通过设置stdin,stdout或stderr来重定向标准句柄。

请注意,此解决方案仅适用于Windows。我不知道任何* nix系统。



 类似资料:
  • 问题内容: 我正在开发一个用Java编写的程序,对于某些操作,它使用用户配置的命令行启动外部程序。当前它使用并且不保留引用(启动的程序是文本编辑器或存档实用程序,因此不需要系统输入/输出/错误流)。 但是,这有一个小问题,即当Java程序退出时,直到所有启动的程序都退出后,它才真正退出。 如果启动的程序完全独立于启动它们的JVM,我将更喜欢它。 目标操作系统是多个,最低要求是Windows,Lin

  • 问题内容: 在我的VPS上启动selenium独立服务器时遇到麻烦 输出: 此后没有更多输出。在本地,相同的命令就像一个超级按钮一样工作。任何提示如何解决此问题? 爪哇 更新1 该服务根本不在任何端口上运行 Netstat输出 更新2 好的,这里的主要问题是selenium服务器在启动时卡住了,我不知道为什么。我销毁了我的VPS机器并从头开始。selenium服务器启动一次,在我停止并再次启动后,

  • 我正在使用Spring Boot创建一个独立的jar,使用Export命令和Runnable jar,并试图在命令提示符下运行jar,但它会抛出以下错误,同一个应用程序正在Eclipse中运行。我不能使用maven,我也没有在我的应用程序中使用spring-boot-thymeleaf。即使在添加了spring-boot-autoconfigurator-thymeleaf jar之后,我也会得到

  • 我是Selenium IDE的初学者。添加了插件,并试图运行一个测试用例。它向我显示了下面的错误消息。 因此,我下载了必要的jar文件,并执行下面的命令java-jar selenium-server-standalone-2.28.0。jar[替换为下载的最新版本] 收到的信息如下:该怎么办? selenium-server-standalone-3.0.1。罐子 Java版本java版本"1.

  • 我正在使用Intellij IDEA 14.1,并试图调试最基本的独立Spring Boot 1.2.5应用程序。有人能告诉我怎么做吗? 我读过http://docs.spring.io/autorepo/docs/spring-boot/1.2.5.RELEASE/maven-plugin/usage.html但并没有成功地使其发挥作用。最简单的方法是禁用Spring Boot在调试时使用的分叉

  • 问题内容: 使用Java计时器,然后切换到ScheduledExecutorService,但我的问题未解决。由于系统时间更改之前安排的任务(通过ntpd)不会按指定的延迟执行。没有日志,什么也没有发生:(。 在64位Linux上的目标中使用jre 1.6.0_26 64位。 更新: ScheduledExecutorService在Windows上运行正常。问题仅存在于运行64位JVM的基于64