6

sys.argv現在、次のような変数を介してファイルのグロビングを使用するスクリプトがあります。

if len(sys.argv) > 1:
        for filename in sys.argv[1:]:

これは、多数のファイルを処理するのに最適です。argparseただし、これをモジュールでも使用したいと思います。だから、私は私のプログラムが次のようなものを処理できるようにしたいと思います:

foo@bar:~$ myScript.py --filter=xyz *.avi

誰かがこれをやろうとしたことがありますか、または続行する方法についていくつかの指針がありますか?

4

2 に答える 2

17

私が正しく理解していれば、あなたの質問は、いくつかのフラグまたはオプションのパラメーターと一緒にファイルのリストをコマンドに渡すことについてです。私が正しければ、argparse の引数設定を活用する必要があります。

ファイルp.py

import argparse

parser = argparse.ArgumentParser(description='SO test.')
parser.add_argument('--doh', action='store_true')
parser.add_argument('files', nargs='*')  # This is it!!
args = parser.parse_args()
print(args.doh)
print(args.files)

上記のコメント行は、未定義の数 >= 0 ( nargs ='*') の位置引数を期待するようにパーサーに通知します。

コマンドラインからスクリプトを実行すると、次の出力が得られます。

$ ./p.py --doh *.py
True
['p2.py', 'p.py']
$ ./p.py *.py
False
['p2.py', 'p.py']
$ ./p.py p.py
False
['p.py']
$ ./p.py 
False
[]

ファイルが複数であるか 1 つだけであるかに関係なく、ファイルがリストにどのように表示されるかを観察します。

チッ!

于 2011-12-07T23:18:51.147 に答える
1

または、次の方法で両方を使用することもできます。

import sys
import argparse
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbose", help="increase verbosity", action="store_true")
    args, unknown = parser.parse_known_args()
    for file in sys.argv:
        if not file.startswith("-"):
            print(file)

ただし、これはスタンドアロンのパラメーターに対してのみ機能します。それ以外の場合、引数値はファイル引数として扱われます (スペースで区切らないか、コードをさらに改善しない限り)。

于 2015-05-01T20:00:48.753 に答える