[英]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.