繁体   English   中英

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

[英]What's the problem with executing commands in Windows CMD from Python?

从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 x64和3.2 x86上对其进行了测试,两者的结果是:在Python Shell中,它的计数高达250-350,然后停止。 没错,没事。 然后,指定文件夹中存在文件1-80。

现在,我以为Python可能太快了,所以在命令之间让它进入了sleep(1)了1秒钟。 现在,第一个文件出现在文件夹中之前,它最多可以计数200个! 然后停在大约270。

这里会发生什么,我如何强制CMD立即执行命令?

您是否正在处理PIPES中的输出? 他们可能正在填补。 如果您从进程中填充了stdout或stderror缓冲区,它将停止执行。

我认为您最好使用pywin32软件包。 有win32pipe和win32process模块​​。 我也遇到了同样的问题,但是没有pywin32-site-package我无法解决它。所以现在我正在使用它们...如果您需要示例代码,而您正在使用Windows,我会附加它。 如果您的意思是linux ...是相同的,但是您需要另一个,例如IO select。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM