从 optparse 切换到 argparse 后 - 我遇到了奇怪的错误。argparse 仅在不留空格的情况下解析 args:
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"
- 它认为 arg 是="-4.5.5-double_non-parallel_gcc"
(!);没有这样的事情
2&>
。2>
应该可以使用并且它没有给出错误;这是
shell
谁将行拆分为 args,而不是python
;argparse
比optparse
。