from sys import argv
script, lira_cbt, [eur_hedge] = argv
if eur_hedge == None:
#Do x
else:
#Do y
lira_cbtを引数として(xを実行する)、またはlira_cbtとeur_hedge(yを実行する)の両方で実行できるようにします。これはsys.argvで実現できますか?sys.argvはオプションの引数を扱うことができますか?
from sys import argv
script, lira_cbt, [eur_hedge] = argv
if eur_hedge == None:
#Do x
else:
#Do y
lira_cbtを引数として(xを実行する)、またはlira_cbtとeur_hedge(yを実行する)の両方で実行できるようにします。これはsys.argvで実現できますか?sys.argvはオプションの引数を扱うことができますか?
ちょうど別のオプションはtry
を使用してargvリストから値を抽出することであるsys.argv
if len(sys.argv) == 2:
# do X
else:
# do Y
sys.argv
の長さを確認できます。
if len(sys.argv) < 2:
# Error, not enough arguments
lira_cbt = sys.argv[1]
if len(sys.argv) == 2:
# Do X
else:
eur_hedge = sys.argv[2]
# Do Y
しかし、eur_hedgeの値を具体的に引き出すことは、引数を展開するために必要以上に多くの変数を必要としないで行うことはできません。 – Felix
いいえ、それを関数呼び出しに変換し、 'def main(script、lira_cbt、eur_hedge = None)'や 'main(* sys.argv)'のようなものを使用しない限り、これを行う方法はありません。私は間違いないでしょう。 –
これは使い捨てのスクリプトよりの一部であることがある場合、それははるかに複雑になりますが、それはあなたがあなたのプログラムが受け入れるオプションを文書化保つのを助ける現時点でhttp://docs.python.org/library/argparse.html
argparse使用することを検討し、 「解凍する値が多すぎます」とは違って、ユーザーが理解できない有用なエラーメッセージも表示されます。
私は別のアプローチを提案することができる場合は、次の
from sys import argv
option_handle_list = ['--script', '--lira_cbt', '--eur_hedge']
options = {}
for option_handle in option_handle_list:
options[option_handle[2:]] = argv[argv.index(option_handle) + 1] if option_handle in argv else None
if options['eur_hedge'] == None:
#Do x
else:
#Do y
これはうまくいくかもしれませんが、このタスクのために 'argparse'のようなモジュールを使うのは、もっと簡単で楽しくなるでしょう。 – YSelf
@自分自身私はより簡単な/より伝統的な解決策について議論していません。元の質問に答えるだけです。 –
あなたのCLIは、その複雑取得した場合(あなたには、いくつかの古いバージョンで立ち往生している場合や 'optparse')、あなたはおそらく' argparse'を使用して開始する必要があります。 – delnan