簡體   English   中英

Python for:循環不會暫停?

[英]Python for: loop won't pause?

好的,所以我有一個腳本,可以在給定文件名進行搜索時查找,移動和重命名文件。 我在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秒鍾,我想要它執行的是顯示“ Analyzing&Moving what ....”,然后在腳本完成后顯示“ Done”。 我的問題是消息和“完成”。 消息同時出現。 我在上面添加了一個小暫停,大約.25s,也是一樣,但是它只是在顯示“分析和移動任何東西……完成”的時間上增加了.25s。 基本上,為什么它不顯示我的第一條消息,暫停,然后顯示第二條消息? 因為現在它同時顯示整行。 這可能是由於我對管道的了解不深而已。

在第一個write()之后立即添加對sys.stdout.flush()的調用。

您看到的行為與緩沖有關。 有關討論,請參見sys.stdout.flush()方法的用法

這里有幾個問題。

首先,要調用另一個python腳本,沒有理由像現在那樣使用os.system 您只需要沿着

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

或什么都比做。

其次,如果要使用Python的內置庫移動文件,請參見此SO問題該問題說明您應使用shutil.copyfile而不是os.system

這還將解決暫停問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM