2

好的,所以我有一个脚本可以在给定要搜索的文件名时查找、移动和重命名文件。我在我的 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 秒,和同样的东西,但它只是增加了 0.25 秒来显示“分析和移动任何东西......完成”所需的时间。基本上,为什么它不会显示我的第一条消息,暂停,然后显示第二条?因为现在它同时显示整行。这可能是因为我对管道和诸如此类的知识贫乏..

4

3 回答 3

4

sys.stdout.flush()在第一个之后添加一个呼叫write()

您看到的行为与缓冲有关。有关讨论,请参阅sys.stdout.flush() 方法的用法。

于 2013-03-18T15:08:09.377 回答
2

这里有几个问题。

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

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

或其他什么,让比去做。

其次,如果您要使用 Python 的内置库移动文件,请参阅这个 SO question,它解释了您应该使用shutil.copyfile而不是os.system.

这也将解决暂停问题。

于 2013-03-18T15:10:38.707 回答
0
....
for item in files:
    sys.stdout.write("Analyzing & Moving " + item + "... ")
    os.system('python mover-s.py "' + item + '"')
sys.stdout.write("Done.\n")
print ""
....
于 2013-03-18T15:09:11.530 回答