2013-01-19 42 views
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,我可以看到一个新的cmd shell产卵。蟒蛇子进程(“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() 

有什么区别?

回答

0

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

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

+0

这并不能帮助我。我想要第一种情况下的第二种行为。 – prongs

+0

使用'python -i'可以帮助 –

+0

没有。在使用'python -i'之后,仍然有相同的行为 – prongs