我想从新终端中的子流程获取用户输入
import subprocess
additionalBuildArguments = "defaultarg1"
proc = subprocess.Popen(["python", "user_input.py", additionalBuildArguments],
creationflags=subprocess.CREATE_NEW_CONSOLE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try:
outs, errs = proc.communicate(timeout=15)
except subprocess.TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
additionalBuildArguments = outs or additionalBuildArguments
用户_input.py:
import sys
arg = sys.argv[1]
user_input = input(f"Additional build arguments [{arg}] (Push <ENTER> to use these settings):\n")
print(user_input)
只要我不设置stdout=subprocess.PIPE和/或stderr=subprocess.PIPE选项,我就可以输入。但是有了这些选项,我就不能向控制台写入任何输入了。 实际上,我需要这些选项来重定向标准输出,以便在父进程中访问打印的用户输入。 有人知道这里有什么问题吗
请注意,我不明白你为什么要这样做,并且本能地认为你不应该这样做。然而,这是完全可能的:只需catpure-onlystdout:
编辑显然您正在使用windows。根据文档,在
shell=True
时设置您的标志。对于shell=True
这对我来说很有效,但我不知道是否对你有效:这可以链接到第三个进程中运行,该进程需要打印,同时还需要从子进程捕获stdout。但是在这一点上,我们正处于非常可怕的黑客领域
一个更好的,但仍然很粗糙的解决方案,是重新表述这个问题。您希望生成一个终端,这显然是您可以做到的,并且用户可以正确地与其交互,然后您希望在生成代码中从该终端获得输出STDOUT不是此通信的正确通道。就我个人而言,我的代码结构如下:
在生成代码中:
在生成的代码中:
这仍然是不容易的,但它只涉及产卵一个终端。请注意,我仍然不明白您为什么要这样做,但这至少应该起作用
相关问题 更多 >
编程相关推荐