在Python中从Windows CMD执行命令有什么问题?

0 投票
2 回答
1068 浏览
提问于 2025-04-16 13:24

我在用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)缓冲区填满了,程序就会停止执行。

撰写回答