我尝试了这样的事情,但没有任何效果:
command = "cmd.exe" proc = subprocess.Popen(command, stdin = subprocess.PIPE, stdout = subprocess.PIPE) proc.stdin.write("dir c:\\")
你可能想尝试这样的事情:
command = "cmd.exe /C dir C:\\"
我不认为你可以管入cmd.exe
…如果你是来自unix背景,那么cmd.exe
有一些丑陋的疣!
编辑:根据Sven Marnach,你可以管到cmd.exe
。 我试图在一个python外壳下面:
>>> import subprocess >>> proc = subprocess.Popen('cmd.exe', stdin = subprocess.PIPE, stdout = subprocess.PIPE) >>> stdout, stderr = proc.communicate('dir c:\\') >>> stdout 'Microsoft Windows [Version 6.1.7600]\r\nCopyright (c) 2009 Microsoft Corporatio n. All rights reserved.\r\n\r\nC:\\Python25>More? '
正如你所看到的,你还有一些工作要做(只有第一行被返回),但是你也许能够得到这个工作。
简单地说:
import os os.system('dir c:\\')
尝试在写入管道之后添加对proc.stdin.flush()
的调用,看看事情是否开始按照您的预期proc.stdin.flush()
。 显式刷新管道意味着您不必担心如何设置缓冲区。
此外,不要忘记在命令的末尾加入"\n"
,否则在等待完成命令输入的提示符下,你的子shell将会坐在那里。
我写了关于使用Popen更详细地操作外部shell实例的方法: 在Python中使用同一个进程运行三个命令
就像在这个问题中的情况一样,如果您需要在Windows机器上的多个进程外调用之间维护shell状态,这个技巧可能是有价值的。
尝试:
import os os.popen("Your command here")
你为什么要打电话cmd.exe
? cmd.exe
是一个命令行(shell)。 如果你想改变目录,使用os.chdir("C:\\")
。 如果Python可以提供,请不要调用外部命令。 实际上,大多数操作系统命令都是通过os
模块(和sys)提供的。 我建议你看看os
模块文档,看看可用的各种方法。