2016-06-16 9 views
2

私はコマンドライン引数でパラメータを渡してURLを追加しようとしています。ここで私がしようとしている方法です:私はPythonでオプションの引数を渡す

python url.py text.csv hello 

を実行すると

import argparse 
parser = argparse.ArgumentParser(description='Arguments') 
parser.add_argument('input', metavar='input', type=str) 
parser.add_argument('output', metavar='text', type=str) 
args = parser.parse_args() 
url = 'https://example.com/?z=12&text='+args.output+'&loc{}' 
print url 

これは、URLの2番目渡される引数を追加します。私は2番目の引数をオプションにする方法を知りたいので、2番目の引数を指定せずにurlを何も連結しないで印刷するようにしたい。

両方の引数が与えられる:ここで私は期待していた出力である出力があるべき

python url.py text.csv hello 

https://example.com/?z=12&text=hello&loc{} 

単一の引数が与えられたとき

python url.py text.csv 

を出力する必要があります

https://example.com/?z=12&text=&loc{} 
+0

デフォルトの ''''を設定する以外は? –

+0

デフォルト設定? @ IgnacioVazquez-Abramsについて説明してください。私はまだ学んでいます。 – csvb

答えて

1

ご覧のとおり、2つの方法があります。

import argparse 
parser = argparse.ArgumentParser(description='Arguments') 
parser.add_argument('input', metavar='input', type=str) 
parser.add_argument('-output', metavar='text', type=str, default='') 
args = parser.parse_args() 
url = 'https://example.com/?z=12&text='+args.output+'&loc{}' 
print url 
Ignacio's replyが示唆するように、あなたが output引数のデフォルト空の値を設定し、

import sys 
args_input = sys.argv[1] 
args_output = sys.argv[2] if len(sys.argv) > 2 else '' 
url = 'https://example.com/?z=12&text='+args_output+'&loc{}' 
print url 

またはあなたのオプションの引数に-を追加し、:どちらのあなたは完全​​の使用を避けるなど、何かのために行きます

python url.py text.csb -output hello 

または:あなたが好きそれを呼び出す必要があります。この第二の選択肢で

python url.py text.csb 

ただし、後でさらに引数を追加する場合は、より拡張性があります。

+0

最初の引数が常に渡された場合、 'output'の前に' -'を置くだけで、よりクリーンな構文になる可能性があります。次に、プログラムは 'python url.py text.csb -output hello'または' python url.py text.csb'で呼び出すことができます –

+1

私は完全に同意します!私はちょうどそれについて考えていた!私はあなたの提案を表示するために再編集します!ありがとう! – jaumebonet

+0

はい。ありがとうございました。私は第2引数パーサーに '-'を追加することを選択しました。私は、残りのコードを 'sys 'に変更するよりも簡単に追加できると思った。argsv [] '私はあなたがsys.argsv [] @jaumebonetを使って別のスクリプトに言ったようにしました。誰にもありがとう。 :) – csvb

4

nargs='?'を試してみて、defaultを定義します。

import argparse 
parser = argparse.ArgumentParser(description='Arguments') 
parser.add_argument('input', metavar='input') 
parser.add_argument('output', metavar='text', nargs='?', default='') 
args = parser.parse_args() 
url = 'https://example.com/?z=12&text='+args.output+'&loc{}' 
print url 

私はちょうど1コマンドライン文字列、args.outputでそれをテストする場合のデフォルトです:

In [91]: args = parser.parse_args(['one']) 

In [92]: args 
Out[92]: Namespace(input='one', output='') 

In [93]: args = parser.parse_args(['one','two']) 

In [94]: args 
Out[94]: Namespace(input='one', output='two') 

それだけnargs='?'(または 'を使用するのが最適です* 'または' + ')に最後の位置引数を指定します。それは以前のもので使用することは可能ですが、より多くの質問であなたを送り返すことができる合併症があります。

関連する問題