0

それはうまくいくはずだと思います。タグ名で作成されたファイルで、各タグのこのコマンド "grep -l %s *.py" % tag の出力を取得したい。

import os
import sys

results_dir = '/home/ks/one/work/tn/format-description 15852/results'
converters_dir = '/home/ks/one/work/cvr'
export_dir = '/home/ks/one/work/epr'
all_dirs = {'cvr':cvrs_dir, 
            'epr':eprs_dir}

tags = [tag.strip() for tag in open('new file').readlines()]
for coe, directory in all_dirs.items(): # coe - type of our file
    os.chdir(results_dir)
    for tag in tags:
        tag_file = open(coe + ' ' + tag, 'w')
        sys.stdout = tag_file
        os.chdir(directory)
        os.system("grep -l %s *.py" % tag)
        tag_file.close()

しかし、スクリプトが実行されたときに表示されるものはすべて、コンソールに出力されます。

4

2 に答える 2

2

Python のサブプロセス モジュールを使用する

http://docs.python.org/library/subprocess.html

ドキュメントには、広範なドキュメントと例が含まれています。

os.system() のもう 1 つの (貧弱な) オプションは、出力をファイルにリダイレクトすることです。

os.system('do_something >/tmp/myoutput')

その後、Python 内から出力ファイルを読み取ります。ただし、これは見苦しく、おそらくあまり移植性がありません。

于 2012-09-05T08:16:23.487 に答える
0

私が考えることができる最も最小限の変更は、Python で出力を取得できるようにすることです。

os.system("grep -l %s *.py" % tag)

為に:

output = commands.getoutput("grep -l %s *.py" % tag)

このようにして、コマンドの出力は出力変数になります。

サブプロセスを使用するようにコードを変更するように他の人が独断的に言う理由がわかりません。そのためには、さらに書き直す必要があります。

于 2012-09-05T08:20:27.433 に答える