Je veux suivre les lignes d'un script Python comme ils sont exécutés. Toutefois, le programme que j'utilise doit imprimer des choses à l'égard. L'option de trace au module de trace Python les imite à stdout. Y a-t-il un anwyay pour lui dire de ne pas les imprimer à STDOUT, mais sauvez-les dans un fichier? J'ai essayé de définir le paramètre Outfile code>, mais cela n'arrête pas l'impression de lignes de trace. P>
5 Réponses :
Selon les documents du module de trace, la tenue est utilisée uniquement pour rédiger des informations de comptage mises à jour.
trace module continuera à imprimer les informations de trace à stdout. p>
pour un traçage manuel, s'il y a une fonction d'entrée, j'ai utilisé SyS.SetTrace pour faire le travail de traçage flux d'appels. Il peut être étendu à la ligne de trace par exécution de la ligne. Vous pouvez toujours déposer les informations à un fichier plutôt que d'imprimer sur stdout. P>
une structure simple est p> GlobalTrace et localTrace sont des fonctions de rappel qui sont appelées avec l'événement - "Pourquoi" P> dire Pour l'événement Lorsqu'une fonction est appelée, vous pouvez extraire les informations des détails de l'image. p> J'ai posté les détails complets ici . p> p>
Y a-t-il de toute façon / autre module pouvant enregistrer les données de trace dans un fichier?
@Rory: Comment tracez-vous l'exécution? Quelle commande utilisez-vous? J'ai déjà utilisé le traçage manuel, modifier la sortie à mon goût.
Merci pour votre réponse. Ceci est beaucoup de code. Y a-t-il une bibliothèque maintenue qui pourrait aider ici?
Vous pouvez copier le code de module de trace et faire quelques modifications pour l'obtenir pour écrire sa sortie dans un fichier de votre choix. Il y a cinq relevés d'impression code> entre les lignes 600 et 650 qui sont ceux que vous souhaitez modifier. Puisque vous n'avez pas besoin de le faire trop jolie, vous pouvez ajouter ceci à la fin du fichier: et modifier les instructions d'impression afin de: P> print >>my_out_file, "%s(%d): %s" % (bname, lineno,
linecache.getline(filename, lineno)),
Au cas où cela se bloque, vous devriez probablement activer tampon de ligne A > ouvert (..., tampon = 1) code>
Il peut arriver que vous ayez besoin de "trace de fonction" décrit pour php . J'ai créé outil Python qui produit une sortie similaire en utilisant mentionné par Pyfuncy Sys.SetTrace (). p>
Appliquez-vous de la trace à la ligne de commande? Si tel est le cas, je recommande d'utiliser la méthode standard de rétablissement de tout stdout à n'importe quel fichier. Rediriger toute sortie au fichier
foo > allout.txt 2>&1
Je pense que OP souhaitait que le stdout du programme soit toujours à l'endroit habituel.