optparseからargparseに切り替えた後、私は奇妙なエラーが発生しています。Python:optparseからargparseに切り替える
myScript.py -oOpt
または等号置く:Argparse空白が生じない場合にのみ、引数を解析
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
をそれはオプション(または2&>
とオプションとして../date +%Y-%b-%d-%H%M%S.log
)として扱い2&>
のように見えます!
編集2:
だから、要約する:については
から
"-4.5.5-double_non-parallel_gcc"
を不正なオプション名である - そして書くために必要とする理由ですが-w="-4.5.5-double_non-parallel_gcc"
ようです。optparse
とbash
(!)の場合はこれで問題ありません。bash
でも-w="-4.5.5-double_non-parallel_gcc"
にエラーが出ます - それはargが="-4.5.5-double_non-parallel_gcc"
(!)だと思います。2&>
のようなものはありません。2>
を使用する必要がありますが、エラーは発生しません。ではなく、
shell
で、行をargsに分割します。は、
optparse
よりはるかに優れています。
コードを 'tmp.py'に置くと、' python tmp.py -w3'と 'python tmp.py -w 3'の両方が私のために '3'を出力します。 – chepner
@chepner:はいそれは...実際問題は、[gmx_bk-get-results.bash]の75行目になります(https://github.com/bk322/bk-bio/blob/master/gmx_bk-get-results)。 .bash):その行から '='を取り除くと、スクリプトはエラーを返します。私は '' $ wW ''を与えないかのようにします。再現するには[bk-copies-from-dirs.py](https://github.com/bk322/bk-goodies/blob/master/bk-copies-from-dirs.py)と[gmx_bk-cpt2gmx.py](https://github.com/bk322/bk-bio/blob/master/gmx_bk-cpt2gmx.py)...すべてが 'optparse'でうまくいきました。誰かがこの問題を「理論的に」見ることを願っています。 – Adobe
脚本コメント:バージョンチェッカーは必要ありません。 Python 3を使用している場合、一番下のprintステートメントは構文エラーを引き起こし、スクリプトはロードされません。 Python 2.6以降を使用している場合、バージョンチェックに入る前に、スクリプトは 'argparse'をインポートすると失敗します。 – HardlyKnowEm