2017-10-12 23 views
0

J'ai écrit un module qui, s'il est importé, modifie automatiquement la sortie d'erreur de mon programme. C'est assez pratique de l'avoir dans presque n'importe quel code python que j'écris.Ajouter un module lors de l'exécution d'un programme python à partir du terminal

Ainsi je ne veux pas ajouter la ligne import my_errorhook à chaque code que j'écris mais je veux que cette ligne soit ajoutée automatiquement.

J'ai trouvé this answer, indiquant qu'il devrait être évité de changer le comportement de python directement. Alors je pensais à changer la ligne de commande, quelque chose comme

python --importModule my_errorhook main.py 

et définissant un alias dans le bashrc pour écraser la commande python pour ajouter automatiquement le paramètre. Y a-t-il un moyen de parvenir à un tel comportement?

+0

Vous pouvez définir une commande python personnalisé comme 'python_err' ou quelque chose comme ça et garder votre' commande python' aussi. – Ankirama

+0

Semble bien, mais gardez à l'esprit que "Explicite est mieux que implicite". Mais je suppose que ce n'est pas un gros problème si vous n'avez pas vraiment besoin de connaître 'my_errorhook' en lisant le code principal, puisque errorhook n'affecte que la sortie d'erreur. BTW, si vous utilisez le Python REPL fréquemment, vous pouvez ajouter 'my_errorhook' à un script de démarrage nommé dans PYTHONSTARTUP. –

+0

@ PM2Ring Cette approche sonne bien aussi! Comment puis-je modifier le script PYTHONSTARTUP? – Jonas

Répondre

0

Il n'y a rien de tel que --importModule dans la ligne de commande python. La seule façon de créer le code sans importer explicitement est de mettre vos fonctions dans le module builtins. Cependant, cette pratique est déconseillée car elle rend votre code difficile à maintenir sans un design approprié. Supposons que votre fichier python main.py est le point d'entrée de l'ensemble du programme. Maintenant, vous pouvez créer un autre fichier bootstrap.py, et mettre les codes ci-dessous dans le nouveau fichier.

import main 

__builtins__.func = lambda x: x>=0 
main.main() 

Ensuite, la fonction func() peut être appelée de tous les modules sans être importés. Par exemple, dans main.py

def main(): 
    ... 
    print(func(1)) 
    ...