Python paramètres de ligne de commande
Je suis juste de commencer avec python donc je suis aux prises avec un très simple exemple. Fondamentalement, je veux passer le nom d'un exécutable plus son entrée via les arguments de ligne de commande, par exemple:
python myprogram refprogram.exe refinput.txt
Cela signifie que lors de l'exécution de myprogram
, il exécute refprogram.exe
et lui passe en argument refinput
. J'ai essayé de le faire de la manière suivante:
import sys, string, os
print sys.argv
res = os.system(sys.argv(1)) sys.argv(2)
print res
Le message d'erreur que je reçois est:
res = os.system(sys.argv(1)) sys.argv(2)
^
SyntaxError: invalid syntax
Quelqu'un une idée de ce que je fais de mal?
Je suis sous Python 2.7
- Je souhaite que mon ordinateur me donnerait une erreur de massage. 🙂
Vous devez vous connecter pour publier un commentaire.
Cette ligne
Est mal dans un couple des manières.
D'abord, sys.argv est une liste, de sorte que vous utiliser des crochets pour accéder à son contenu:
Seconde, vous vous fermez votre parenthèses sur
os.system
trop tôt, etsys.argv(2)
est laissée en suspens off de la fin de celui-ci. Vous voulez déplacer la parenthèse fermante à la fin de la ligne, après tous les arguments.Troisièmement, vous devez séparer les arguments avec une virgule, une espace simple de ne pas le faire.
Votre dernière ligne devrait ressembler à ceci:
Loin, loin meilleure façon de le faire est avec la argparse bibliothèque. Le envoyé wrapper bibliothèque fait sous-processus plus facile de travailler avec aussi bien.
Un exemple simple:
Ce lit dans les arguments, analyse, puis les envoie à la méthode main comme un dictionnaire de mots clés et de valeurs. Qui vous permet de tester votre méthode principale indépendamment de votre argument de code, en passant par preconstructed dictionnaire.
La principale méthode imprime les mots clés et les valeurs. Ensuite, il crée une chaîne de commande, et le passe à envoyé à exécuter. Enfin, il imprime le résultat de la commande.
Si vous avez pip installé, envoyé peut être installé avec
pip install envoy
. La façon la plus simple pour obtenir le pip est un programme avec la pip-installer.envoy
au lieu deos.command
depuis que j'ai manqué dans la question d'origine.sys.argv
est une liste, et est indexé à l'aide de crochets, par exemplesys.argv[1]
. Vous voudrez peut-être vérifierlen(sys.argv)
avant de l'indexation ainsi.Aussi, si vous voulez passer des paramètres à
os.system()
, vous pourriez voulez quelque chose commeos.system(' '.join(sys.argv[1:]))
, mais cela ne fonctionne pas pour les arguments contenant des espaces. Il est préférable d'utiliser le sous-processus module.sys.argv est une liste
Si vous utilisez Python 2.7, il est recommandé d'utiliser le nouveau
sous-processus
module.Dans ce cas il faudrait écrire