2016-10-11 17 views
2

I'lが渡されていない場合は、この動作でプログラムを構築したい:Pythonのデフォルトパラメータ、コマンドライン引数は

使用方法:セージ4ct.py [-h](R -r | -i I | -p P)[-o O]

しかし、パラメータを指定しない場合は、デフォルトとして「-r 100」を使用したいと思います。

可能ですか?

parser = argparse.ArgumentParser(description = '4ct args') 

group_input = parser.add_mutually_exclusive_group(required = True) 
group_input.add_argument("-r", "-random", help = "Random graph: dual of a triangulation of N vertices", nargs = 1, type = int, default = 100) 
group_input.add_argument("-i", "-input", help = "Input edgelist filename (networkx)", nargs = 1) 
group_input.add_argument("-p", "-planar", help = "Load a planar embedding of the graph G.faces() - Automatically saved at each run: input_planar_file.serialized", nargs = 1) 
parser.add_argument("-o", "-output", help="Output edgelist filename (networkx)", nargs = 1, required = False) 

args = parser.parse_args() 
+1

Eh? 'args.random'のデフォルトは' 100'です。ユーザーに明示的にメンバーを渡す必要がないようにするには、なぜ**必須**グループを追加していますか? –

答えて

4

ちょうどrequiredを削除追加引数をadd_mutually_exclusive_group関数呼び出し(またはFalseに設定)すると、完了です。

import argparse 

parser = argparse.ArgumentParser(description = '4ct args') 

group_input = parser.add_mutually_exclusive_group(required = False) 
group_input.add_argument("-r", "--random", help = "Random graph: dual of a triangulation of N vertices", type = int, default = 100) 
group_input.add_argument("-i", "--input", help = "Input edgelist filename (networkx)") 
group_input.add_argument("-p", "--planar", help = "Load a planar embedding of the graph G.faces() - Automatically saved at each run: input_planar_file.serialized") 
parser.add_argument("-o", "--output", help="Output edgelist filename (networkx)", required = False) 

print(parser.parse_args()) 
# Namespace(input=None, output=None, planar=None, random=100) 
print(parser.parse_args("-r 77".split())) 
# Namespace(input=None, output=None, planar=None, random=77) 
print(parser.parse_args("-o some/path".split())) 
# Namespace(input=None, output='some/path', planar=None, random=100) 
print(parser.parse_args("-i some/path".split())) 
# Namespace(input='some/path', output=None, planar=None, random=100) 
print(parser.parse_args("-i some/path -o some/other/path".split())) 
# Namespace(input='some/path', output='some/other/path', planar=None, random=100) 
print(parser.parse_args("-r 42 -o some/other/path".split())) 
# Namespace(input=None, output='some/other/path', planar=None, random=42) 
あなたが見ることができるようにしても

は、randomオプションは100にデフォルト設定されます。

  • outputオプションが提供され、提供され
  • random以外の相互排他的なグループからオプション通常思われ、その問題になる可能性があります。 randomが唯一の排他的なオプションであるかどうかをチェックする必要があります。

また、この例では、あなたのオプションのパーサーにいくつかの小さな改善が含まれています

  • は、(それが慣例ですが、それも正しくオプション名を認識するためにargparseことができます)2つのダッシュと長いオプション名を使います。
  • オプション定義でnargs=1を削除すると、1つの値のリストを取得できます。それを削除することで、値を直接取得できます。
+0

私がOPを理解する方法は、引数がまったく与えられない場合にのみ 'r = 100'が望ましいことです。あなたの答えを正しく理解すれば、rが与えられなければrは100に等しくなります。 –

+2

@THeeren:OPの質問はあなたのバージョンではクレジットを与えるようです。しかし、それは精度の欠如かもしれません。このバージョンは私の視点からは意味をなさないので、 'output'オプションが提供されていても' random'値をデフォルトとするこの解決策を提供することを好みます;) – Tryph

+0

私は同意します。彼はr/i/pのいずれかが必要だと思われる。しかし、私の答えで-oだけが与えられれば、r/i/pは提供されません。 –

0

次試してみる:基本的に

import argparse 
import sys 

parser = argparse.ArgumentParser(description='4ct args') 

group_input = parser.add_mutually_exclusive_group(required=True) 
group_input.add_argument("-r", "-random", help="Random graph: dual of a triangulation of N vertices", nargs=1, type=int,    default=100) 
group_input.add_argument("-i", "-input", help="Input edgelist filename (networkx)", nargs=1) 
group_input.add_argument("-p", "-planar", help="Load a planar embedding of the graph G.faces() - Automatically saved at each run: input_planar_file.serialized",nargs=1) 
parser.add_argument("-o", "-output", help="Output edgelist filename (networkx)", nargs=1, required=False) 

if not sys.argv[1:]: 
    sys.argv.extend(['-r', '100']) 

args = parser.parse_args(sys.argv[1:]) 

任意のコマンドラインパラメータが全く与えられている場合は、チェックしているが、そうでない場合、あなたが希望-r 100

+0

ありがとうございます。それはうまくいった! –

関連する問題