0
import os, subprocess
p = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print>>p.stdin, "echo hi"
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
print>>p.stdin, "python"
p.stdout.readline()

现在,如果我这样做p.stdout.readline()了,为什么我看不到 python shell?

另一方面,如果不是python,我从子进程启动了另一个cmd,我可以看到一个新的cmdshell 产生。

import os, subprocess
p = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print>>p.stdin, "echo hi"
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
print>>p.stdin, "cmd"
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()

有什么不同?

4

1 回答 1

0

当 Python 的标准输出不是终端设备时,它的行为会有所不同:没有提示,没有横幅,它只是读取一个完整的脚本并执行它。

我不确切知道它是如何移植到 Windows 的,但“控制台句柄”是他们拥有的“终端设备”的关闭对象。

于 2013-01-19T15:25:07.430 回答