Nach dem Wechsel von optparse zu argparse - ich habe seltsame Fehler. Argparse args analysieren nur, wenn kein Platz verlassen:Python: Wechsel von optparse zu argparse
myScript.py -oOpt
oder ein Gleichheitszeichen setzen:
myScript.py -o=Opt
und es nicht die normale Art und Weise arbeiten:
myScript.py -o Opt
Hier meine argparse Initialisierung ist :
#!/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
bearbeiten:
Mehr noch:
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 &
gibt:
gmx_bk-simulate-mems.py: error: unrecognized arguments: 2
es sieht aus wie argparse
behandelt 2&>
als Option (oder 2&>
und ../date +%Y-%b-%d-%H%M%S.log
als Optionen)!
Edit 2:
Um es zusammenzufassen:
Für
argparse
-"-4.5.5-double_non-parallel_gcc"
ist eine schlechte Option Name - und deshalb ist es erforderlich, ist als-w="-4.5.5-double_non-parallel_gcc"
zu schreiben. Füroptparse
undbash
(!) Ist das in Ordnung.bash
gibt sogar einen Fehler bei-w="-4.5.5-double_non-parallel_gcc"
- es denkt, dass der arg ist="-4.5.5-double_non-parallel_gcc"
(!);Es gibt keine
2&>
.2>
sollte verwendet werden und es gibt keine Fehler;Dies ist
shell
wer teilt die Zeile in Args, nichtpython
;argparse
ist viel besser alsoptparse
.
Setzen Sie Ihren Code in 'tmp.py', beide' python tmp.py -w3' und 'python tmp.py -w 3' drucken '3' für mich. – chepner
@chepner: ja tut es ... Tatsächlich gibt das Problem Zeile 75 in [gmx_bk-get-results.bash] (https://github.com/bk322/bk-bio/blob/master/gmx_bk-get-results .bash): Wenn man '=' aus dieser Zeile entfernt, gibt das Skript einen Fehler aus - als ob ich es nicht "$ wW" 'geben würde. Um sich zu reproduzieren, braucht man auch [bk-copies-from-dirs.py] (https://github.com/bk322/bk-goodies/blob/master/bk-copies-from-dirs.py) und [gmx_bk-cpt2gmx.py] (https://github.com/bk322/bk-bio/blob/master/gmx_bk-cpt2gmx.py) ... Bei optparse lief alles gut. Ich hoffe, dass jemand das Problem "theoretisch" sehen wird. – Adobe
Pedantischer Kommentar: Sie benötigen den Versionsüberprüfer nicht. Wenn Sie Python 3 verwenden, führt die Druckanweisung am Ende zu einem Syntaxfehler und das Skript wird nicht einmal geladen. Wenn Sie Python 2.6 oder niedriger verwenden, schlägt das Skript beim Importieren von 'argparse' fehl, bevor Sie sogar zur Versionsüberprüfung gelangen. – HardlyKnowEm