Après avoir regardé les autres posts de stackoverflow, je n'arrive pas à comprendre ce problème de redirection. Ce que je voudrais faire est de supprimer à la fois stdout et stderr, puis les restaurer après que l'erreur soit détectée. La suppression fonctionne bien, mais ne les restitue qu'à moitié. Si j'essaie de supprimer et de restaurer stderr et stdout, la suppression fonctionne mais pas la restauration. Si j'essaie seulement de supprimer/restaurer stdout cela fonctionne (mais alors je reçois tout le texte stderr que je ne veux pas). Je ne peux pas expliquer pourquoi il y aurait une différence pour que stderr empêche stdout d'être restauré, en espérant que ça soit le cas (ou si je fais quelque chose de bizarre/stupide)
Heres le code que je veulent travailler mais seulement disparaitre out/err et ne restaure pas (« stdout Restauré » jamais prints):Restauration des sys.stdout et sys.stderr redirigés produisant des résultats impairs
sys.stdout = None
sys.stderr = None
try:
op_args = op_parse.parse_args(selection.split(' '))
except SystemExit:
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
print("Restored stdout")
Heres le code qui supprime stdout et restaure (au coût de l'impression du stderr satanés)
sys.stdout = None
#sys.stderr = None
try:
op_args = op_parse.parse_args(selection.split(' '))
except SystemExit:
sys.stdout = sys.__stdout__
#sys.stderr = sys.__stderr__
print("Restored stdout")
EDIT: J'ai figuré un wo rk autour, mais je suis toujours intéressé par la raison pour laquelle le problème ci-dessus se produit. Mon travail consiste à réaffecter stdout/stderr à = open ("/ dev/null", "w") qui produit le comportement que je veux. Encore une fois je voudrais toujours l'entrée sur le problème original
Merci pour l'entrée, je suis d'accord que la restauration doit se produire dans le bloc finally, dans ce programme de test, je donnais volontairement une erreur à chaque fois, donc je n'ai pas dérangé. J'ai découvert le truc "/ dev/null" avant de voir cela, donc je peux confirmer que votre solution fonctionne. (aussi op_parse n'est pas opt_parse c'était juste un mauvais nom de variable pour représenter 'options parse') – sliceOfPi