管道cmd.exe的孩子的输出缺少

时间:2016-05-23 23:25:55

标签: python windows cmd

嵌入控制台的情况下,使用子进程管道cmd.exe在大多数情况下都能正常工作。 当使用stdout.read(1)-thread当然。然而这个线程对于少数命令没有任何帮助(我发现这对于python本身以及python程序)。

我知道有很多关于孩子输出的问题,但这是关于丢失孩子的(等等)输出。可以轻松跟踪cmd.exe本身的输出以及大多数命令。此外,我可以假设输入相同,因为输入exit()时cmd.exe中的交互式python shell没有关闭。

这可能是一个缓冲问题 - 但这很奇怪,因为Popen 禁用了缓冲(并且p.stdin.flush()被用作python赢得不在p elseway内启动)。这也可能是因为进程的不良继承及其标准的i / o流引起的,但我实际上希望它不会。

我可以看到可以很好地使用示例代码,但这实际上是,就像我提到的嵌入式。因此,如果有人看到理论上的问题,我可以跳过导出该代码的过程:)但是我应该添加一个例子,即使这个板子提供了很多与cmd.exe和popen有关的例子。这比花在搜索解决方案上花费的时间少。

基本问题是

subprocess.Popen("cmd.exe", stdin = -1, stdout = -1, stderr = -2, bufsize=0)

该子进程的所有子进程似乎都在使用管道。 cmd一旦孩子被杀,就开始接受进一步的命令(可能确保丢失它的输出)。

0 个答案:

没有答案