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.

peut-être la réponse se trouve dans la question "pourquoi vous voulez être en mesure d'appeler sans l'extension" ?
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