微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何保持subprocess.Popen控制台在Windows上崩溃后打开?

我的目标是用每个Popen进程的几个不同的参数调用主程序,每个进程都有自己的控制台窗口。 但是,一旦遇到崩溃,就会closures那个控制台,而我真的很想保持它打开。

import subprocess from subprocess import CREATE_NEW_CONSOLE import time for i in range(1,5): subprocess.Popen(["python","main.py",str(i),str(i)],close_fds=False,creationflags=CREATE_NEW_CONSOLE) time.sleep(3)

是否有可能通过subprocess.Popen进程创build一个新进程。打开并保持控制台打开让我读取错误链接到子stream程文档 。

在新窗口中创build线程c ++

如何最小化控制台窗口?

程序显示控制台输出,即使stdout和stderr被redirect

Windows版本的wcswidth_l

是否有可能build立一个控制台应用程序,双击时不显示控制台窗口?

控制台窗口由conhost.exe(Win 7+)的实例托管,当没有进程连接到它时退出。 所以你只需要附加第二个python.exe进程到每个控制台,并让它等待。 下面是一个简单的演示脚本,它使得服务器进程在主进程(即工作进程的父进程)上等待:

import sys # If started with a pid,wait for the associated process to exit. if len(sys.argv) > 1: import ctypes kernel32 = ctypes.WinDLL('kernel32',use_last_error=True) SYNCHRONIZE = 0x00100000 pid = int(sys.argv[1]) hproc = kernel32.OpenProcess(SYNCHRONIZE,pid) if not hproc: sys.exit(ctypes.get_last_error()) print('waiter: waiting') kernel32.WaitForSingleObject(hproc,-1) sys.exit(0) import os import subprocess print('worker: start') # The waiter waits on our parent (ppid). p = subprocess.Popen([sys.executable,sys.argv[0],str(os.getppid())]) print('worker: exit')

例如:

>>> import sys,subprocess >>> flags = subprocess.CREATE_NEW_CONSOLE >>> p = subprocess.Popen([sys.executable,'main.py'],creati) >>> p.wait() 0 >>> exit()

工作进程重新生成自己等待其父。 然后退出,返回码为0.控制台窗口在exit()后关闭

你也可以从主进程产生服务器实例。 在这种情况下,将工作人员的PID传递给服务员。 然后,服务员可以调用FreeConsole和AttachConsole将自己附加到工作人员的控制台。 这是比较复杂的,但它使得主要流程很容易终止服务员。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐