2016-12-13 1 views
-1

Iveにはいくつかのサブプロセスが実行されており、stdout txtファイルは出力フォルダにあります。 stdout txtファイルに書かれたプロセスの最後に常に "exit"文字列がある場合、出力フォルダ内のすべてのファイルをループすることによって、すべてのサブプロセスを待ちたいと思います。 ありがとうございました。ディレクトリ内のすべてのtxtファイル内にテキストがある場合ループを終了

for file in glob.glob("filename*.txt"): 
     with open(file, "r").read() as f: 
      if "exit" in f: 
       break 

が、ファイルのいずれかが出ていますときには、破損します:

これは私が持っているものです。 開始時にFalseを指定すると良い解決策になりますか?そして休憩の代わりに続ける?

+0

まず、指定したフォルダ内のすべてのファイルを一覧表示するコードを記述します。 [ヒント](http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a-directory-in-python)[ヒント](http://stackoverflow.com/questions/ 3964681/find-all-files-in-directory-with-extension-txt-in-python)。すべてのファイルを一覧表示するコードを作成したら、もう一度質問してください。 SOのコードを尋ねるだけで、あなたの質問は閉鎖されています。 – smac89

+0

申し訳ありませんが私のコードをputtngしています。私はちょうどそれらのファイルのすべてが条件を満たすときにループを終了する方法を知らない – Lucas

答えて

0

条件が満たされるまでループする必要があります。 breakwhile True:ループ内で使用してこれを実行できます。

file_names = glob.glob("/tmp/foo*.txt") 
while True: 
    if not file_names: 
     break 
    for file_name in file_names: 
     with open(file_name, "r") as f: 
      if "exit" in f.read(): 
       file_names.remove(file_name) 

ここでは、file_names変数一度ます唯一の出口が空の無限ループに入っています。空でない場合は、その変数をループし、ファイルを開いて読み込みます。ファイルに "exit"が含まれている場合、そのファイル名がリストから削除されます。

time.sleepを実行することを検討して、ファイルシステムを台無しにすることはできませんが、待機する予定の時間によって異なります。たぶんタイムアウトになります。

+0

堅牢性のために、キーワード "exit"が単独で行に現れなければならないようにOPの仕様を鋭くするのが良いかもしれません – jez

関連する問題