После перехода с 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"
это плохое имя варианта - поэтому и требуется писать is как-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
.
tmp.py
, иpython tmp.py -w3
, иpython tmp.py -w 3
напечатают для меня "3". - person chepner   schedule 09.04.2012=
из этой строки - скрипт выдает ошибку - как будто я не даю ему"$wW"
. Для воспроизведения необходимо также получить bk -copies-from-dirs.py и gmx_bk -cpt2gmx.py... Наoptparse
все работало нормально. Я надеюсь, что кто-то увидит проблему теоретически. - person Adobe   schedule 09.04.2012argparse
еще до того, как вы доберетесь до проверки версии. - person HardlyKnowEm   schedule 11.04.2012argparse
. Спасибо, что поделились! - person HardlyKnowEm   schedule 11.04.2012