11
votes

Comment exécuter un autre script Python de votre script et être capable de déboguer?

Vous avez un script d'emballage Python qui appelle un autre script Python, en utilisant actuellement OS.System ('Python ANTNON.PY ONE PARAMS') .

Vous voulez pouvoir déboguer les deux scripts et si vous utilisez OS.System () Vous perdez le débogueur, il est donc logique de charger le second script à la place de la même interprétation. de commencer un autre.

importer n'est pas à la chose prévue car il n'exécute pas le __ principal __ .

Autres variantes, comme Exec () ou coutures pour manquer les paramètres argv .

Quelle solution voyez-vous pour ce problème?

Je recherche une solution qui ne vous oblige pas à modifier le script autre.py . Cela nécessitera probablement de modifier le sys.argv avant de l'exécuter.


2 commentaires

Dans les non-solutions, vous avez également ExecFile () , ce qui pourrait être utile dans d'autres situations.


J'ai oublié exécutant () , je vais tester si elle exécute le __ Main __ ou non, cela étant très important.


4 Réponses :


2
votes

Avez-vous un contrôle sur autre.py ? Ce serait une bonne idée de le changer et d'ajouter une méthode principale () . Main () peut alors être invoqué si __Name__ == '__Main __' . Cela atténuera vos problèmes beaucoup. C'est aussi des tests unitaires conviviaux.


0 commentaires

1
votes

Vous pouvez appeller le bloc principal d'appeler une fonction. De cette façon, vous pourrez appeler la même fonction lors de l'importation de module.

def main():
    print "All start up commands"

if __name__ == "__main__":
    main()


0 commentaires

9
votes

Jusqu'à présent, j'ai trouvé une solution qui fonctionne uniquement avec Python 2.7+ (Runpy.Run_Path () a été introduite dans Python 2.7).

Si vous pouvez en trouver un qui fonctionne avec 2,6 (ou même 2,5), vous êtes invités à poster. xxx


0 commentaires

2
votes

Sur la base de la recommandation reçue de EOL, j'ai fait une extension à ExecFile () qui résout ses limitations ExecFile2 ()

ci-dessous est le code, mais les versions plus récentes seront publiées ici . Il est compatible à l'envers avec ExecFile () . xxx


1 commentaires

Votre ligne, sauvegardé_argv = sys.argv # Nous enregistrons SYS.ARGV est incorrect. Peut-être que vous voulez dire de copier la liste: enregistré_argv = sys.argv [:]