1

私はPythonを初めて使用し、数時間調べた後、解決策を見つけることができませんでした(または他の人が提供した解決策を理解できませんでした)。

フォルダー内の同じ初期名「pid」の後に連続しない整数が続くいくつかのファイルの内容をチェックして、それらすべてに「done」という単語が含まれていることを確認したかったのです。ファイルには 1 つの単語が含まれています。

私の最初のアイデアは使用することでした

cat pid*

どういうわけかそのコマンドの出力をリストに取得し、値を比較してリストを横断します

result = 'Finished'
for x in range(len(myList)):
    if 'done' not in myList[x]:
        result = 'Continue'
        break
if result == 'Finished':
    print 'Finished'

それが私の考えでしたが、cat の出力を含むリストを取得する方法が見つかりません。

いくつか掘り下げた後、私はアイデアをあきらめ、本当に貧弱な実装を作成しました(私は思う)より良い解決策が必要だと確信しています

filedir = os.popen('ls','r')

for line in filedir:
    print line
    if 'pid' in line:
        filename = open(line.replace('\n', ''), 'r')
        firstline = filename.readline()
        print firstline
        if 'done' not in firstline:
            status = 'RUNNING'
            break
if status == 'DONE':
    print 'Finished'
else:
    print status

どんな助けでも本当に感謝しています!

4

2 に答える 2

3

glob「Unixシェルで使用されるルールに従って、指定されたパターンに一致するすべてのパス名を検索する」モジュールを使用できます。

import glob
for fn in glob.glob('pid*'):
    with open(fn) as f:
        if 'done' in f.read():
            ...
于 2012-08-10T11:32:58.513 に答える
2

globワイルドカード一致を実行してからファイルを読み取るために使用します。

そしてお願いします... Python自体で簡単に実行できることのためにシェルコマンドを呼び出すのをやめてください

于 2012-08-10T11:22:08.723 に答える