我想扩展Windows解决方案。在Python 2.7.5中使用IDLE,当我从文件Expts.py运行以下代码时:

import subprocess
r = subprocess.check_output('cmd.exe dir',shell=False)
print r
...在Python Shell中,我仅获得与“ cmd.exe”相对应的输出;“目录”部分将被忽略。但是,当我添加诸如/ K或/ C之类的开关时...
import subprocess
r = subprocess.check_output('cmd.exe /K dir',shell=False)
print r

...然后在Python Shell中,我得到了包括目录清单在内的所有期望值。oo!

现在,如果我在DOS Python命令窗口中尝试任何相同的操作,而没有使用该开关或使用/ K开关,则它似乎使该窗口挂起,因为它正在运行子进程cmd.exe并等待进一步的输入-输入“退出”,然后按[输入]释放。但是,使用/ K开关,它可以完美运行,并返回到python提示符。那好吧。

再走一步...我认为这很酷...当我改为在Expts.py中这样做时:

import subprocess
r = subprocess.call("cmd.exe dir",shell=False)
print r

...一个新的DOS窗口弹出并保持在那里,仅显示“ cmd.exe”的结果,而不显示“ dir”的结果。当我添加/ C开关时,DOS窗口会非常快地打开和关闭,然后才能看到任何内容(正如预期的那样,因为/ C完成后会终止)。当我改为添加/ K开关时,DOS窗口会弹出并保留,并且我会得到所有我期望的输出,包括目录列表。

如果我从DOS Python命令窗口尝试相同的操作(subprocess.call而不是subprocess.check_output);所有输出都在同一窗口内,没有弹出窗口。如果没有该开关,则再次忽略“ dir”部分,并且提示符从python提示符更改为DOS提示符(由于cmd.exe子进程正在python中运行;再次键入“ exit”,您将还原为python提示符)。添加/ K开关将打印出目录列表,并将提示从python更改为DOS,因为/ K不会终止子进程。将开关更改为/ C可以得到所有预期的输出,并且由于子进程按照/ C终止,因此返回到python提示符。

很抱歉,回复时间长,但我对本板上的许多简洁的“答案”感到沮丧,这些答案充其量是行不通的(似乎是因为未经测试,例如爱德华·F在我上面的回答,缺少切换)或更糟糕的是,它们太简洁了,以至于它们根本无济于事(例如,“尝试子进程而不是os.system”……是的,好的,现在是什么?)。相反,我提供了经过测试的解决方案,并展示了它们之间的细微差别。花了很多时间,但是...希望这会有所帮助。