J'ai un programme qui prend en arguments de la forme filename:field[slice]
, qui fonctionne bien. Mais je souhaite également soutenir la notation commune qu'un nom de fichier de -
signifie l'entrée standard. Malheureusement, -:field[slice]
s'enregistre comme une option avec optparse (naturellement), et n'apparaît donc pas comme un argument positionnel. Je me demande donc s'il y a un moyen de contourner cela, par exemple en disant à optparse que les options commençant par -:
devraient être traitées comme des arguments positionnels après tout. La solution doit conserver l'ordre des arguments, de sorte que foo:bar -:cow baz:dog
ne devienne pas foo:bar baz:dog -:cow
.Faire optparse traiter certaines options comme des arguments de position
1
A
Répondre
2
Il me semble que votre meilleure option est de pré-traiter sys.argv
en insérant un jeton spécial que vous vérifiez au lieu de -
.
args = [ '<stdin>:'+x[2:] if x.startswith('-:') else x for x in sys.argv[1:] ]
opt_struct = parser.parse_args(args)
Dans ce cas, vous analyser <stdin>
comme entrée standard dans votre programme au lieu de -
.
La transformation devient un peu plus compliquée si le :
et les trucs qui le suivent sont optionnels, mais c'est l'essentiel de toute façon.
9 fois sur 10, ces problèmes sont probablement impossibles à résoudre avec optparse
, vraiment délicat/désordre à résoudre avec argparse
et trivial à résoudre par prétraiter sys.argv
- Mais peut-être est juste mon expérience ...
Questions connexes
- 1. Options commandées dans optparse de Python
- 2. Analyse des arguments de position
- 3. Comment puis-je obtenir la liste optparse de tous les arguments et options possibles?
- 4. Comment utiliser optparse pour simplement diviser les arguments de ligne de commande en options et en arguments positionnels?
- 5. Option avec 2 arguments en optparse
- 6. Création d'un processus avec des options pparhp optparse héritées
- 7. Position argparse des arguments de position
- 8. C, avec des fonctions Traiter arguments variables
- 9. optparse et les chaînes
- 10. Faire Knockout applyBindings pour traiter de sélectionner les options comme le nombre
- 11. Perl - Analyse des arguments/options avec REGEX
- 12. gestion des exceptions pour optparse de python
- 13. Nécessité de trier XSLT pour traiter certaines chaînes comme des nombres
- 14. Comment traiter une entrée de chaîne comme 'None' comme non-type
- 15. Python optparse, les valeurs par défaut, et les options explicites
- 16. En Python, est-il une meilleure façon de traiter avec des options de ligne de commande lorsque chaque option pourrait avoir plusieurs arguments
- 17. Est-il possible de traiter les arguments de la macro comme des expressions régulières?
- 18. Passer des méta-caractères à Python comme arguments à partir de la ligne de commande
- 19. Magento, la position des options configurables
- 20. suppriment l'une des options d'aide lors de l'utilisation optparse en python
- 21. Python optparse format de message d'aide
- 22. optparse handling ArugmentException
- 23. limitants HttpModule à traiter uniquement certaines demandes
- 24. position des options dans l'élément de sélection HTML
- 25. In Bash: Puis-je traiter la liste des arguments dans une boucle for comme une liste?
- 26. flotteur divs, traiter comme des lignes
- 27. Python Threading, la liste des 10 liens pris comme 10 arguments de position
- 28. Traiter uniquement certaines partitions du cube
- 29. Traiter les événements comme des objets
- 30. Exécution d'une application web.py avec des options de cmd personnalisées
Merci pour la solution élégante, cela a fonctionné comme un charme (sauf que j'ai dû utiliser 'sys.argv [1:]')! – amaurea
@amaurea - à droite. 'sys.argv [1:]'. J'ai mis à jour le post. Merci pour la correction :) – mgilson