optparseからargparseに切り替えた後-奇妙なエラーが発生しました。Argparseは、スペースを残さない場合にのみ引数を解析します。
myScript.py -oOpt
または等号を入れてください:
myScript.py -o=Opt
そしてそれは通常の方法では機能しません:
myScript.py -o Opt
これが私のargparseの初期化です:
#!/usr/bin/env python
# to get description use the -h flag
import argparse, os, sys
# ======================
# Python2.7 is expected:
if sys.version_info[0] != 2 or sys.version_info[1] < 7:
sys.exit('This program needs Python2.7+')
# ==========
# preambule:
desc = """Enter dirs in the current dir and makes gro out of state.cpt there."""
# parser = argparse.ArgumentParser()
parser = argparse.ArgumentParser(description=desc, version='2.3', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-w', '--workWith',
help = 'to specify a Gromacs exec suffix',
dest = 'wW',
action = 'store',
default = '-4.5.5-single',
)
parser.add_argument('-g', '--gro',
help = '.gro postfix: <nameOfTheDir><postfix>.gro',
dest = 'myGroPostfix',
action = 'store',
default = "_membrane",
)
parser.add_argument('-H', '--here',
help = 'toggles - single (current) dir behaviour (the output will be state.gro)',
dest = 'Here',
action = 'store_true',
)
parser.add_argument('-D', '--dirs',
help = 'include these dirs (python\'s rgxp in SINGLE quotes), defaults to \'\'',
dest = 'inclDirs',
action = 'store',
default = '',
)
args = parser.parse_args()
print args.wW
編集:
さらに:
gmx_bk-simulate-mems.py -j bk-runs-mpi.bash -p 1 -w="-4.5.5-double_non-parallel_gcc" 2&> ../`date +%Y-%b-%d-%H%M%S`.log &
与える:
gmx_bk-simulate-mems.py: error: unrecognized arguments: 2
オプションとして(またはオプションとして)argparse
扱うように見えます!2&>
2&>
../date +%Y-%b-%d-%H%M%S.log
編集2:
要約すると:
For-は不適切なオプション名です
argparse
-"-4.5.5-double_non-parallel_gcc"
そのため、asと書く必要があります-w="-4.5.5-double_non-parallel_gcc"
。optparse
およびbash
(!)の場合、これは問題ありません。bash
でもエラーが発生します-w="-4.5.5-double_non-parallel_gcc"
-引数は="-4.5.5-double_non-parallel_gcc"
(!)であると見なされます。のようなものはありません
2&>
。2>
使用する必要があり、エラーは発生しません。これは
shell
、行を引数に分割する人であり、python
;ではありません。argparse
よりもはるかに優れていoptparse
ます。