好吧,所以我有一个脚本可以在给定要搜索的文件名时查找,移动和重命名文件。我在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秒显示“分析和移动任何......完成”所需的时间。 基本上,为什么它不会显示我的第一条消息,暂停,然后显示第二条消息?因为现在它同时显示整行。这可能是因为我对管道知识不足等等。
答案 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 ""
....