Comment faire pour supprimer la sortie de la console en Python?
J'utilise Pygame/SDL joystick de module pour obtenir l'entrée d'une manette. Chaque fois que j'appelle de ses get_hat()
méthode qu'il imprime à la console. C'est un problème depuis que j'utilise la console pour m'aider à déboguer et maintenant, il est inondé avec SDL_JoystickGetHat value:0:
60 fois par seconde. Est il possible que je peux désactiver cette option? Soit par le biais d'une option dans Pygame/SDL ou de supprimer la sortie de la console, tandis que les appels de fonction? Je n'ai vu aucune mention de cela dans la Pygame documentation.
edit: Cela s'avère être en raison de débogage est activé lorsque la librairie SDL a été compilé.
- Maintenant, je suis curieux de ce que la plate-forme (Linux distro?), et ce paquet que vous utilisez? Ou avez-vous compilez vous-même?
- C'était il y a longtemps, mais j'ai été en utilisant Windows, la version 2.6 de Python et Pygame 1.9 (qui comprend la SDL). J'avais juste allé avec leurs programmes d'installation Windows et tout ce qui a déjà été compilé.
Vous devez vous connecter pour publier un commentaire.
Voici le bloc de code à partir d'un joystick.c (via SVN à http://svn.seul.org/viewcvs/viewvc.cgi/trunk/src/joystick.c?view=markup&revision=2652&root=PyGame)
Ressemble à un problème avec le fait d'avoir le débogage activé.
SDL_DEBUG
mais l'insertionos.environ['SDL_DEBUG'] = '0'
semble avoir aucun effet.Juste pour être complet, voici une belle solution de Dave Smith blog:
Avec cela, vous pouvez utiliser le contexte de la gestion, où que vous souhaitez supprimer de sortie:
Vous pouvez contourner ce problème en attribuant le standard/erreur (je ne sais pas où l'on va) pour le périphérique null. En Python, le standard d'erreur/les fichiers sont
sys.stdout
/sys.stderr
, et le périphérique null estos.devnull
, de sorte que vous neCela devrait désactiver ces messages d'erreur complètement. Malheureusement, ce sera également désactiver toutes les sorties de la console. Pour contourner ce problème, désactiver la sortie juste avant l'appel de la
get_hat()
la méthode, et de la restaurer en faisantqui restaure standard et d'erreur pour leur valeur d'origine.
os.devnull
arrive à être une chaîne de caractères en python 3.6 sur linuxAttributeError: 'module' object has no attribute '___stdout___' a
Pour compléter la réponse de charles, il y a deux gestionnaires de contexte construit en python,
redirect_stdout
etredirect_stderr
que vous pouvez utiliser pour rediriger et ou de supprimer une des commandes de sortie vers un fichier ouStringIO
variable.Pour une explication plus complète de lire les docs
with redirect_stdout(print('Worked!')): do_thing()
- Je utiliser pythonw.exe (sur Windows) au lieu de python.exe.
Dans d'autres Systèmes d'exploitation, vous pouvez également rediriger la sortie vers /dev/nul.
Et pour ma sortie de débogage, je suis en utilisant le module de journalisation.
Comme Demolishun mentionne dans un réponse de la fermeture d'une double question, il y a un fil de parler de cette question. Le fil est à partir d'août 2009, et l'un des développeurs dit le code de débogage a été laissé dans l'accident. Je l'avais installé avec Pygame 1.9.1 de pip et de la sortie de débogage est toujours présent.
De le contourner pour l'instant, j'ai téléchargé à partir de la source pygame.org, a supprimé l'impression des déclarations de la src/joystick.c et compilé le code.
Je suis sur OS X 10.7.5 pour ce que ça vaut.
Si vous êtes sur un système Debian ou Ubuntu machine, vous pouvez tout simplement recompiler pygame sans les messages.
Salutations
Max