5

現在、sys.argv [1]を使ってコマンドラインで文字列を受け入れるpythonファイルがあります。その後、その文字列に対して操作を実行し、変更された文字列をコマンドラインに返します。optparseを使って引数を受け入れる最も平凡な方法

私は

ような何かをやって出力をリダイレクトすることができるように私は、文字列(1行に1つずつ、FWIW)のファイルを提供することができるでバッチモードのオプションを実装し、それがコマンドラインに戻りたいと思い

$ python script.py -someflag file.txt > modified.txt 

現在のところ、現在の機能は維持されています。

私は2.6しか実行していないので、argparseはオプションではありません。私が見たチュートリアルでは、argparse、getopt、または複雑すぎる/適用しない例を掘り下げて使用しています。

入力を確認して適切に行動する最良の方法は何ですか?

+1

argparseはまだオプションです2.6には組み込まれていません。サードパーティのパッケージ( 'pip install argparse'など)のようにインストールすることはできます。 –

答えて

6

argparseはまだ選択肢ですが、2.6には組み込まれていません。サードパーティのパッケージのようにインストールすることはできます(たとえば、easy_install argparseを使用)。このため

コードの例は次のようになります。

import sys 
import argparse 

p = argparse.ArgumentParser(description="script.py") 
p.add_argument("-s", dest="string") 
p.add_argument("-f", dest="infile") 

args = p.parse_args() 

if args.infile == None and args.string == None: 
    print "Must be given either a string or a file" 
    sys.exit(1) 
if args.infile != None and args.string != None: 
    print "Must be given either a string or a file, not both" 
    sys.exit(1) 
if args.infile: 
    # process the input file one string at a time 
if args.string: 
    # process the single string 
+0

ありがとう!私はargparseが2.7より前のサードパーティーであることを知らなかった。コードは追加ボーナスだ。私はそれを試してみるとすぐにこれを受け入れるでしょう:) – verbsintransit

+0

あなたは大歓迎です。 argparseは非常に強力で直感的なツールであり、非常にお勧めします。 –

+1

'None'に対してテストするときは、' is'と 'is not'を使ってその値をテストするのがより難しくなります:' args.infileがNone、args.stringがNone: 'かつ' args.infileがNoneではなく、args.stringはNoneではありません: '。 –

3

は、ここに私の答えを参照してください:ショートカットとしてWhat's the best way to grab/parse command line arguments passed to a Python script?

を、ここではいくつかのサンプルコードがあります:

import optparse 

parser = optparse.OptionParser() 

parser.add_option('-q', '--query', 
    action="store", dest="query", 
    help="query string", default="spam") 

options, args = parser.parse_args() 

print 'Query string:', options.query 
+0

** ** ** pythonバージョン2.7以降、* optparse *の使用はお勧めしません。 optparseモジュールは廃止され、さらに開発されることはありません。 * argparse *モジュールを使用して開発を続行します。詳細については、[PEP 0389](http://www.python.org/dev/peps/pep-0389/)を参照してください。 – shakaran

関連する問題