在Python中从Windows CMD执行命令有什么问题?
我在用Python给CMD发命令时遇到了很大的麻烦。
首先,我打开了一个CMD进程:
cmdprocess = subprocess.Popen("cmd",
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
然后,我做了一些事情,比如:
for i in range(500):
#time.sleep(1)
command = ("dir > " + os.path.join("C:\\", str(i)) + "\r\n").encode("utf-8")
print(command)
cmdprocess.stdin.write(command)
这个操作应该是在一个文件夹里创建500个小文本文件。我在Python 3.2的64位和32位版本上测试过,结果都是:在Python的命令行里数到大约250到350的时候就停了。没有错误提示,什么都没有。然后在指定的文件夹里只看到1到80的文件。
我想可能是Python运行得太快了,于是我让它在命令之间暂停1秒钟。现在,它在文件夹里第一个文件出现之前数到大约200!然后在270的时候又停了。
这到底是怎么回事,我该怎么让CMD立即执行命令呢?
2 个回答
1
我觉得你最好使用pywin32这个包。里面有win32pipe和win32process这两个模块。我之前也遇到过同样的问题,但没有pywin32这个库我就解决不了。所以现在我在用它们。如果你需要示例代码,而且你是在Windows系统上,我可以把代码发给你。如果你是指Linux系统,那也是类似的,不过你需要用另一个像IO select这样的东西。
3
你有没有在处理管道中的输出?它们可能会被填满。如果你把进程的标准输出(stdout)或标准错误(stderror)缓冲区填满了,程序就会停止执行。