我想生成一个子进程,如果一切都在后台发生而不打开一个新的Windows控制台,那将会很好。
首先我认为我的代码出了问题,因为它会在向子进程发送输入时导致错误。 像字符串这样的命令,例如生成错误
未知动作:tring
意思是,有时会丢失通过stdin.write
发送到子流程的输入的第一个字符。
这就是代码:
self.sp = subprocess.Popen(
args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
现在我尝试了以下内容,一切正常。问题是新开放的安慰。
self.sp = subprocess.Popen(
args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
creationflags = subprocess.CREATE_NEW_CONSOLE
)
有没有另一种方法可以在不打开新的Windows控制台的情况下实现这一目标?
您的链接引导我对CREATE_NEW_WINDOW标志的描述
进程还可以通过指定来创建控制台 在调用CreateProcess时CREATE_NEW_CONSOLE标志。这种方法 创建一个可供子进程访问但不能访问的新控制台 到父进程。父母和孩子都可以使用独立的控制台 进程与用户进行交互而不会发生冲突。 如果是这个标志 在创建控制台进程时未指定,两个进程都是 附在同一个控制台上,并不能保证 正确的流程将收到针对它的输入。 应用程序 可以通过创建不继承的子进程来防止混淆 输入缓冲区的句柄,或者只启用一个子进程 在阻止父进程的同时继承输入缓冲区句柄的时间 从阅读控制台输入到孩子完成的过程。
如果可以在不打开窗口的情况下创建新控制台。
这似乎已经解决了问题
bufsize=1
谢谢。
答案 0 :(得分:0)
“是否有另一种方法可以在不打开新的 Windows 控制台的情况下实现这一目标?” 就在这里 ! 您可以使用创建标志 CREATE_NO_WINDOW,如下所示:creationflags=subprocess.CREATE_NO_WINDOW
瞧!没有窗户!