Vous avez un script d'emballage Python qui appelle un autre script Python, en utilisant actuellement Vous voulez pouvoir déboguer les deux scripts et si vous utilisez Autres variantes, comme Quelle solution voyez-vous pour ce problème? P>
Je recherche une solution qui ne vous oblige pas à modifier le script OS.System ('Python ANTNON.PY ONE PARAMS') CODE>. P>
OS.System () code> 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. p>
importer code> n'est pas à la chose prévue car il n'exécute pas le
__ principal __ code>. p>
Exec () code> ou
coutures code> pour manquer les paramètres
argv code>. p>
autre.py code>. Cela nécessitera probablement de modifier le
sys.argv code> avant de l'exécuter. P>
4 Réponses :
Avez-vous un contrôle sur autre.py code>? Ce serait une bonne idée de le changer et d'ajouter une méthode
principale () code>.
Main () Code> peut alors être invoqué
si __Name__ == '__Main __' code>. Cela atténuera vos problèmes beaucoup. C'est aussi des tests unitaires conviviaux. p>
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()
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. p>
Sur la base de la recommandation reçue de EOL, j'ai fait une extension à ci-dessous est le code, mais les versions plus récentes seront publiées ici . Il est compatible à l'envers avec ExecFile () code> qui résout ses limitations ExecFile2 ()
ExecFile () code>. P>
Votre ligne, sauvegardé_argv = sys.argv # Nous enregistrons SYS.ARGV code> est incorrect. Peut-être que vous voulez dire de copier la liste:
enregistré_argv = sys.argv [:] code>
Dans les non-solutions, vous avez également
ExecFile () code>, ce qui pourrait être utile dans d'autres situations.
J'ai oublié
exécutant () code>, je vais tester si elle exécute le
__ Main __ code> ou non, cela étant très important.