python subprocess(“cmd”)产生另一个交互式shell

时间:2013-01-19 15:20:28

标签: python windows subprocess

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,我可以看到一个新的cmd shell生成。

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()

有什么区别?

1 个答案:

答案 0 :(得分:0)

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

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