2013-01-19 61 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