Comment faire pour exécuter un script python, sans préciser l'extension de fichier (croix-plate-forme de solution)?
Disons que nous avons un script Python do.py
et nous voulons être en mesure d'appeler sans extension, comme do
ou ./do
.
Si nous renommer le fichier à partir de do.py
à do
et de nous assurer que nous avons un valide ligne shebang elle fonctionne pour toutes les plates-formes Windows, mais. Sur Windows il n'y a aucun moyen de l'exécution d'un fichier sans l'extension.
Sur Windows, si nous gardons l'extension du fichier original, nous allons être en mesure d'appeler le script sans le nom complet parce que le Python programme d'installation enregistre .py
extension d'un fichier exécutable.
Il semble que nous avons besoin pour fournir le même script, sous deux noms différents pour être l'appeler sur Windows et non les environnements Windows. Je n'aime vraiment pas cela et je suis à la recherche d'une solution sans cette redondance.
Une autre approche consiste à ajouter un do.cmd
wrapper fichier de commandes qui est l'appel de l'original do.py
fichier. Cela a au moins un problème majeur: il ne briser le Ctrl+C /Ctrl+Pause car il n'existe aucun moyen pour empêcher cmd.exe
vous invite à Résilier le lot de travail? (O/N) message.
Si nous sommes sur le point d'utiliser un wrapper nous devons nous assurer que:
- retour errorcode (errorlevel) renvoyée par le script original
- elle ne va pas changer l'environnement
- il va réutiliser le même console (pas de nouvelles fenêtres)
- n'interfère pas avec STDOUT, STDIN ou STDERR
- être amical avec Ctrl-C (aucun message)
Je suppose que la meilleure solution est encore d'utiliser un wrapper. Lot ne fonctionne pas, le fichier exécutable natif serait d'ajouter beaucoup de complexité et donc probablement un wrapper écrit en python lui-même le ferait.
Wow, ce que beaucoup de travail pour pas de réel avantage. Quel est le problème avec do.py? C'est parfaitement croix-plate-forme avec pas de travail du tout.
Pour ceux qui se demandent: sans extension signifie que nous masquer les détails de mise en œuvre: par exemple, si l'année prochaine je veux remplacer le script Python avec un script Ruby je ne veux pas être nécessaire de changer tous les appels au script. Une autre, moins important argument: moins d'écrire à partir de la ligne de commande.
Sur Windows, si nous gardons l'extension du fichier original, nous allons être en mesure d'appeler le script sans le nom complet parce que le Python programme d'installation enregistre
.py
extension comme un exécutable ce n'est Pas vrai. L'enregistrement de l'extension ne permet pas à l'appel du script, sans donner l'extension. Pour cela, vous devez également ajouter l'extension à la PATHEXT
variable d'environnement de l'as RoMa, a suggéré.OriginalL'auteur sorin | 2010-02-27
Vous devez vous connecter pour publier un commentaire.
Sur windows, j'ai ajouté le".py' extension de l 'PATHEXT' variable d'environnement et qui fonctionne pour moi - si l' .py fichier est stocké dans un répertoire qui fait partie de la "VOIE" de la variable d'environnement.
Mais comment est-ce aussi travailler sur la non-Windows? Puis-je type
do
sans l'extension?OriginalL'auteur RoMa
Écrire votre principal module Python avec un
.py
extension. ConfigurerPATHEXT
correctement, et il sera exécuté sur Windows sans avoir à taper l'extension.Sur Unix, écrire un deuxième programme en Python qui, tout simplement, les importations de la première, en utilisant elle-bang de la syntaxe. Aucune extension de ce fichier - c'est un script shell. Comme ceci:
Cela aura pour effet de l'importation de
do.py
.Seulement
do
doit être marqué comme exécutable pour Unix.do.py
est un module dans l'environnement.Lorsque vous importez un module, le code dans le module est exécuté une seule fois.
Il n'est pas complètement supprimer les redondances, mais il est proche. Et c'est probablement la meilleure solution possible pour la croix-plate-forme de script.
OriginalL'auteur Jason
Jusqu'à présent, je suis venu avec cette solution que les coutures de travail. Créer un fichier
yourname.py
avec ce contenu:OriginalL'auteur sorin
Vous pouvez utiliser distutils pour installer des scripts dans l'installation de Python (le easy_install outil est installé comme celle, par exemple).
Pour Windows, vous pouvez utiliser py2exe pour créer un script qui peut être exécuté sans l'extension de fichier. Sur Linux, vous pouvez tout simplement utiliser un fichier sans l'extension, mais y compris une ligne shebang.
python -m moduleName
. C'est multiplate-forme, aussi.OriginalL'auteur AndiDog
vous pouvez toujours appeler votre script avec l'interpréteur Python. Vous pouvez obtenir la même consistance sous *nix, lorsque vous utilisez les services d'un interprète.
Windows
*nix
Si ce n'est pas ce que vous voulez, alors je suis mal interpréter votre question.
OriginalL'auteur ghostdog74
Jason répondre est plus simple et plus claire, mais une version générique obtient le nom du module à partir du nom de fichier:
Cela dit, je préfère Jason est là qu'il est immédiatement clair ce qui se passe:
OriginalL'auteur Hugo