Python for:循环不会暂停?

时间:2013-03-18 15:06:38

标签: python timing

好吧,所以我有一个脚本可以在给定要搜索的文件名时查找,移动和重命名文件。我在Robotics文件夹中的所有文件夹中为迭代器编写了一个包装器,以自动执行该过程。这是代码:

#! /usr/bin/env python

import os
import sys
import time

files = [ ... Big long list of filenames ... ]

for item in files:
    sys.stdout.write("Analyzing & Moving " + item + "... ")
    os.system('python mover-s.py "' + item + '"')
    sys.stdout.write("Done.\n")
print ""
print "All files analyzed, moved, and renamed."

现在,执行和完成原始脚本需要大约2秒,我想要它做的是显示“分析和移动任何......”然后在脚本完成后显示“完成”。 我的问题是消息和“完成”。消息同时出现。 我添加了一个小停顿,约0.25秒,同样的事情,但它只是增加.25秒显示“分析和移动任何......完成”所需的时间。 基本上,为什么它不会显示我的第一条消息,暂停,然后显示第二条消息?因为现在它同时显示整行。这可能是因为我对管道知识不足等等。

3 个答案:

答案 0 :(得分:4)

在第一个sys.stdout.flush()之后立即拨打write()

您所看到的行为与缓冲有关。有关讨论,请参阅Usage of sys.stdout.flush() method

答案 1 :(得分:2)

这里有几个问题。

首先,要调用另一个python脚本,没有理由像你现在一样使用os.system。你应该只是沿着

的一行
import movers # can't have hyphen in a module name
movers.main()

或者其他什么比让它更好。

其次,如果您要使用Python的内置库移动文件,请参阅this SO question,其中说明您应使用shutil.copyfile而不是os.system

这也将解决暂停问题。

答案 2 :(得分:0)

....
for item in files:
    sys.stdout.write("Analyzing & Moving " + item + "... ")
    os.system('python mover-s.py "' + item + '"')
sys.stdout.write("Done.\n")
print ""
....