J'ai ce code:
def hello():
return 'Hi :)'
Comment pourrais-je l'exécuter directement à partir de la ligne de commande?
python
function
command-line
Steven
la source
la source
print "Hi :)"
au lieu dereturn 'Hi :)'
.Réponses:
Avec l' argument
-c
(commande) (en supposant que votre fichier est nomméfoo.py
):Alternativement, si vous ne vous souciez pas de la pollution de l'espace de noms:
Et le juste milieu:
la source
$python -c "import foo;foo.hello()"
print foo.hello()
par l'aprint(foo.hello())
fait. Je n'ai pas les connaissances en python pour expliquer pourquoi, donc si quelqu'un d'autre pouvait expliquer ce qui pouvait se passer, ce serait grandement appréciéMettez juste
hello()
quelque part en dessous de la fonction et elle s'exécutera lorsque vous le ferezpython your_file.py
Pour une solution plus nette, vous pouvez utiliser ceci:
De cette façon, la fonction ne sera exécutée que si vous exécutez le fichier, pas lorsque vous importez le fichier.
la source
hello()
prend des arguments qui devraient être fournis par la ligne de commande?sys.argv
à la méthode. Ou accédez-y à partir de la méthode bonjourhello()
) et l'exécuter à partir de la ligne de commande?python -c 'from myfile import hello; hello()'
oùmyfile
doit être remplacé par le nom de base de votre script Python. (Par exemple,myfile.py
devientmyfile
).Cependant, si
hello()
est votre point d'entrée principal "permanent" dans votre script Python, la façon habituelle de le faire est la suivante:Cela vous permet d'exécuter le script simplement en exécutant
python myfile.py
oupython -m myfile
.Quelques explications ici:
__name__
est une variable Python spéciale qui contient le nom du module en cours d'exécution, sauf lorsque le module est démarré à partir de la ligne de commande, auquel cas il le devient"__main__"
.la source
python -m foo -c 'foo.bar()'
etpython -c 'import foo; foo.bar()'
? J'obtiens un comportement différent où il semble que l'argument -c soit ignoré dans le premier cas.J'ai écrit un petit script Python rapide qui peut être appelé à partir d'une ligne de commande bash. Il prend le nom du module, de la classe et de la méthode que vous souhaitez appeler et les paramètres que vous souhaitez transmettre. Je l'appelle PyRun et ai laissé l'extension .py et l'ai rendue exécutable avec chmod + x PyRun afin que je puisse l'appeler rapidement comme suit:
Enregistrez-le dans un fichier appelé PyRun
Voici un exemple de module pour montrer comment cela fonctionne. Ceci est enregistré dans un fichier appelé PyTest.py:
Essayez d'exécuter ces exemples:
Notez le dernier exemple d'échappement des parenthèses pour passer dans un tuple comme seul paramètre à la deuxième méthode.
Si vous passez trop peu de paramètres pour ce dont la méthode a besoin, vous obtenez une erreur. Si vous en passez trop, il ignore les extras. Le module doit être dans le dossier de travail actuel, mis PyRun peut être n'importe où sur votre chemin.
la source
ajoutez cet extrait au bas de votre script
Vous pouvez maintenant appeler votre fonction en exécutant
Cela fonctionne parce que vous passez l'argument de ligne de commande (une chaîne du nom de la fonction) dans
locals
un dictionnaire avec une table de symboles locale actuelle. Les parenthèses à la fin feront appeler la fonction.mise à jour: si vous souhaitez que la fonction accepte un paramètre de la ligne de commande, vous pouvez passer
sys.argv[2]
comme ceci:De cette façon, l'exécution
python myscript.py myfunction "hello"
sortirahello
.la source
myfunction(12)
Rendons cela un peu plus facile pour nous et utilisons simplement un module ...
Essayer:
pip install compago
Puis écrire:
Ensuite, utilisez comme ceci:
Remarque: Il existe actuellement un bogue dans Python 3, mais fonctionne très bien avec Python 2.
Edit: Une option encore meilleure, à mon avis, est le module fire de Google qui permet également de passer facilement des arguments de fonction. Il est installé avec
pip install fire
. Depuis leur GitHub:Voici un exemple simple.
Ensuite, à partir de la ligne de commande, vous pouvez exécuter:
la source
python -m fire file_name method_name
. Il a également un argparser intégré.Chose intéressante, si l'objectif était d'imprimer sur la console de ligne de commande ou d'effectuer une autre opération python minute, vous pouvez diriger l'entrée dans l'interpréteur python comme suit:
ainsi que des fichiers de tuyaux ..
* Notez que l'extension n'a pas besoin d'être .py pour que la seconde fonctionne. ** Notez également que pour bash, vous devrez peut-être échapper aux personnages
la source
echo import foo;foo.hello() | python
echo 'print("hi:)")' | python
Si vous installez le package runp avec
pip install runp
une question de fonctionnement:runp myfile.py hello
Vous pouvez trouver le référentiel sur: https://github.com/vascop/runp
la source
J'avais besoin d'utiliser divers utilitaires python (plage, chaîne, etc.) sur la ligne de commande et j'avais écrit l'outil pyfunc spécifiquement pour cela. Vous pouvez l'utiliser pour enrichir votre expérience d'utilisation de la ligne de commande:
la source
C'est toujours une option pour entrer python sur la ligne de commande avec la commande python
puis importez votre fichier afin d' importer exemple_fichier
puis exécutez la commande avec example_file.hello ()
Cela évite la fonction de copie .pyc bizarre qui apparaît à chaque fois que vous exécutez python -c, etc.
Peut-être pas aussi pratique qu'une commande unique, mais une bonne solution rapide pour envoyer un fichier texte à partir de la ligne de commande, et vous permet d'utiliser python pour appeler et exécuter votre fichier.
la source
Quelque chose comme ça: call_from_terminal.py
Cela fonctionne en bash.
la source
Ci-dessous se trouve le fichier Odd_Even_function.py qui a la définition de la fonction.
Maintenant, pour appeler la même chose à partir de l'invite de commande ci-dessous, les options fonctionnent pour moi.
Options 1 Chemin complet de l'exe \ python.exe -c "import Odd_Even_function; Odd_Even_function.OE (100)"
Option 2 Chemin complet de l'exe \ python.exe -c "d'Odd_Even_function import OE; OE (100)"
Merci.
la source
Cette fonction ne peut pas être exécutée à partir de la ligne de commande car elle renvoie une valeur qui ne sera pas manipulée. Vous pouvez supprimer le retour et utiliser plutôt print
la source
Utilisez l' outil python-c ( pip install python-c ) puis écrivez simplement:
ou si vous n'avez aucun conflit de nom de fonction dans vos fichiers python:
la source
Vous devez d'abord appeler la fonction comme ils vous l'ont dit ou la fonction n'affichera rien dans la sortie, après cela enregistrez le fichier et copiez le chemin du fichier par un clic droit sur le dossier du fichier et cliquez sur "copier le fichier" puis allez dans le terminal et écrivez: - cd "le chemin du fichier" - python "nom du fichier par exemple (main.py)" après cela il affichera la sortie de votre code.
la source
Simplifiez-vous la vie, installez Spyder. Ouvrez votre fichier puis exécutez-le (cliquez sur la flèche verte). Ensuite, votre
hello()
méthode est définie et connue de la console IPython, vous pouvez donc l'appeler à partir de la console.la source