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 秒の短い一時停止を追加しましたが、同じことが言えますが、「Analyzing & Moving anything... Done」を表示するのにかかる時間が 0.25 秒増えるだけです。基本的に、最初のメッセージが表示されず、一時停止してから 2 番目のメッセージが表示されないのはなぜですか? 現時点では、行全体が同時に表示されるためです。これは、パイプなどに関する私の知識が乏しいためかもしれません..

4

3 に答える 3

4

Add a call to sys.stdout.flush() right after the first write().

The behaviour you're seeing has to do with buffering. See Usage of sys.stdout.flush() method for a discussion.

于 2013-03-18T15:08:09.377 に答える
2

ここにはいくつかの問題があります。

os.systemまず、別の python スクリプトを呼び出すために、現在行っているように使用する理由はありません。の行に沿って線を引くだけです。

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

または何でもやらせてください。

次に、Python の組み込みライブラリを使用してファイルを移動する場合は、この SO の質問を参照しください。shutil.copyfileos.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 に答える