Python: переключение с optparse на argparse

После переключения с 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:

Итак, резюмируем:

  • Для argparse- "-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"- думает, что аргумент ="-4.5.5-double_non-parallel_gcc"(!);

  • Нет такой вещи, как 2&> .2>можно использовать и это не даст ошибок

  • Это shellразбивает строку на args, а не python;

  • argparseнамного лучше, чем optparse.

6
задан Adobe 13 April 2012 в 10:34
поделиться