Comment puis-je exécuter mon programme python directement à partir du shell?


10

J'ai écrit un script. Lorsqu'il démarre, il ne s'arrête pas et il continue de recevoir des données d'Internet. Je peux l'appeler ainsi:

cd /User/Desktop/project/internetScanner/
python3 main.py start

Mais je voudrais l'appeler directement depuis le terminal comme celui-ci, dans la destination:

internetScanner start

Comment faire?


2
Je me demande si le titre pourrait être changé à ce sujet ..
user606723

@ user606723 N'hésitez pas à suggérer une modification pour la faire changer. Le premier titre "Comment laisser mon programme s'exécuter sur le shell?" n'était pas très bon.
slhck

Réponses:


27

Vous devriez probablement renommer votre fichier main.pyen internetScanner. Les extensions sur * nix sont purement optionnelles. Cela ne devrait pas avoir d'importance ici.

mv main.py internetScanner

Ensuite, ajoutez la ligne suivante à ce fichier, dès le début:

#!/usr/bin/env python3

Cela garantira que lorsque le shell exécute le fichier, il saura utiliser python3pour interpréter le contenu. Ceci est connu comme le Shebang . Maintenant, rendez le fichier exécutable:

chmod +x internetScanner

Vous pouvez maintenant exécuter votre programme à partir de /User/Desktop/project/internetScanner/:

./internetScanner start

Votre programme s'exécutera au premier plan et continuera de s'exécuter jusqu'à ce que vous appuyiez sur Ctrl- C. Si vous ne le souhaitez pas, vous pouvez également démarrer le programme en arrière-plan, en ajoutant une esperluette après la commande:

./internetScanner start &

Cela laissera votre programme s'exécuter, mais vous pourrez continuer à utiliser votre shell. C'est ce qu'on appelle le contrôle des travaux, et il y a un tutoriel simple à ce sujet ici .

Si vous voulez maintenant pouvoir exécuter le programme depuis n'importe où sur le système, vous devez ajouter le internetScannerrépertoire à votre PATH: Que sont les variables PATH et autres variables d'environnement, et comment puis-je les définir ou les utiliser?


Bonne réponse. Je recommanderais d'ajouter qu'il pourrait vouloir terminer la commande avec une esperluette (&) s'il ne veut pas l'attendre et / ou rediriger sa sortie et son flux d'erreur vers un fichier.
Ben Hocking

@BenHocking Merci, je l'ai ajouté à la réponse.
slhck

X &ne détache pas le processus du shell de contrôle, il ne fait que créer un arrière-plan du processus, ce qui signifie que si ce shell se ferme, le signal TERM lui sera envoyé; donc si vous ne voulez pas que vous devez utiliser Détacher , detach ./internetScanner start.
Dan D.

1
@DanD. … Ou nohup, disownou at, et cetera. Comment détacher un processus de Terminal, entièrement?
slhck

Il convient de noter qu'il peut toujours être nommé main.pytant qu'il est lié à internetScannerquelque part dans $ PATH.
jdd

2

En supposant qu'aucun autre fichier /User/Desktop/project/internetScanner/ne soit nécessaire, si vous souhaitez installer pour un seul utilisateur, liez ( ln -s) main.pyà $HOME/bin/internetScanner. Vous devrez probablement mkdir en $HOME/binpremier.

La prochaine fois que vous vous connecterez, il $HOME/binsera probablement ajouté à votre CHEMIN. Si vous souhaitez qu'il soit disponible pour tous les utilisateurs, copiez-le dans /usr/local/bin.

S'il doit s'exécuter /User/Desktop/project/internetScanner/, commencez par importer oset appeler

os.chdir('/User/Desktop/project/internetScanner/') 

ou créez un script de lancement dans $HOME/binou /usr/local/binqui change /User/Desktop/project/internetScanner/et exécute le script.


0

Mettez le alias internetScanner "python /User/Desktop/project/internetScanner/main.py"fichier .aliases (pour csh). Pour bash, alias internetScanner="python /User/Desktop/project/internetScanner/main.py"entrez .bashrc. Après cela, vous pouvez utiliser internetScanner start de n'importe où.


Je n'ai jamais entendu parler d'un .aliasesdossier. Est-ce quelque chose de standard pour Bash? ou devez-vous le trouver explicitement dans votre .bashrc?
Kazark
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.