2011-12-07 9 views
5

でsys.argvのに連動してargparseを使用する:これは、ファイルの束を処理するための素晴らしい作品私は現在、このような<code>sys.argv</code>変数を経由してグロブファイルを使用するスクリプト、持っているPythonの

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

を。しかし、私は​​モジュールでもこれを使用したいと思います。だから、私は私のプログラムは、次のようなものを扱うことができるようにしたいと思います:

[email protected]:~$ myScript.py --filter=xyz *.avi 

は、誰もがこれを実行しようとしました、または続行する方法についていくつかのポインタを持っていますか?

+1

[argparseを使って部分的に解析する](http://docs.python.org/dev/library/argparse.html#partial-parsing) – ig0774

+1

'len(sys.argv)'を取り除き、 'argparse'が' sys.argv'と対話するようにするだけで、機能がそこにあります。 – wim

答えて

15

私が正しくお答えいただきましたら、いくつかのフラグやオプションのパラメータとともにファイルのリストをコマンドに渡してください。私は右のあなたを得た場合、あなただけの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 
[] 

ファイルは関係なく、彼らはいくつかひとつであることのリストになりますどのように観察します。

HTH!

+0

まさに私が探していたもの!ありがとう! – mevatron

+0

あなたは同じことを、フラグのためにどうやってやりますか?私は 'parser.add_argument( '-b'、 '--blacklist'、nargs = '*''を持っていて、シェルから* .mp3をプログラムに渡したいと思います。実際のmp3ファイルは作業ディレクトリにありません。 – p014k

+0

@ p014k - 私はあなたの質問を受け取りません。アスタリスク['*']ワイルドカードを使用してファイルのリストを渡したいが、シェルがあなたのために展開するようにしますか?その場合、引数 '' ./p.py --doh '* .py''を引用する必要があります。 '' p.py'スクリプトの中から、 – mac

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) 

しかし、これが唯一のスタンドアロンのパラメータのために動作しますが、そうでない場合は引数の値は、ファイルの引数として扱われます(あなたがスペースで区切っていないでしょうしない限り、コードをさらに改善してください)。

関連する問題