python sys.argv différencier int et string
Tout simplement, comment puis-je différencier ces deux test.py:
python test.py 1
python test.py '1'
Solution de contournement est OK.
Edit:
- Cette solution de contournement a l'air cool mais trop complexe: argparse
- Laisser l'invocateur spécifier des arguments plus tard, dans le code python utilisation
arg = input('Please enter either an integer or a string')
- Et d'autres solutions de contournement comme présentés dans les réponses de cette question.
Merci à vous tous pour les réponses. Tous les corps +1.
- Et quelque chose comme optparse n'est pas une option, ouais? docs.python.org/library/optparse.html#standard-option-types
- Envisagez-vous de faire le premier argument une chaîne de format? Quelque chose comme "ssiiss" pourrait laisser votre script python savoir attendre deux chaînes, suivie par deux entiers, suivie par deux chaînes de caractères.
- vous devez être à plaisanter appel standard lib, faite exactement pour ces sortes de tâches, une 'solution'.
- Bodnarchuk, je ne pense pas que
argparse
peut résoudre le problème d'origine que chaque corps a dit que c'est impossible. Peut-il? Je l'appelle une solution de contournement.
Vous devez vous connecter pour publier un commentaire.
La ligne de commande shell ne prend pas en charge le passage d'arguments de types différents. Si vous voulez avoir des commandes avec des arguments de types différents, vous devez écrire votre propre ligne de commande ou au moins de votre propre commande de l'analyseur.
Variante 1:
Utilisation:
python test.py "1 2 '3' '4'"
Mise en œuvre:
Variante 2:
Utilisation:
Mise en œuvre:
(Bien sûr, vous voudrez probablement utiliser
raw_input
à lire les lignes de commande, etreadline
quand il est disponible, c'est simplement un exemple.)Une bien meilleure solution serait de savoir réellement ce genre d'arguments, vous êtes tenus d'obtenir et de les analyser en tant que tel, de préférence à l'aide d'un module de type
argparse
.Les guillemets sont consommés par le shell. Si vous souhaitez obtenir en python, vous aurez à invoquer comme
python test.py 1 "'2'" "'3'" 4
1 '2' '3' 4
et j'ai de différencier ceux avec des citations et ceux sans les guillemets dans le code python"
et'
sont consommés par le shell. L'interpréteur Python obtiendrez toujours1 2 3 4
comme des chaînes de caractères, peu importe si elles avaient des guillemets ou pas dans le shell.Il est courant de la manipulation de args, interprété par le shell.
"
et'
sont ignorés, car vous pouvez les utiliser pour passer, par exemple, quelques mots comme un argument.Cela signifie que vous ne pouvez pas différencier
'1'
et1
en Python.Spécifiques à Windows:
Exemple:
Vous pouvez ensuite analyser la ligne de commande vous-même.
Comme vous pouvez le voir à partir de votre expérience, les guillemets sont partis, à l'époque Python est invoquée. Vous aurez à changer la façon dont le Python est invoquée.
Je ne suis pas sûr de savoir comment corriger je suis, mais si vous utilisez uniquement des entiers arguments de ligne de commande, vous pouvez transtypage pour être de type int.
supposons que (sous *nix), je lance mon programme:
Je peux, dans mon programme, de dire quelque chose de la ligne de