Je travaille sous Linux et je me demande comment avoir Python dire s'il est exécuté directement à partir d'un terminal ou via une interface graphique (comme Alt-F2) où une sortie devra être envoyée à une fenêtre plutôt que de stdout qui apparaîtra dans un terminal.
en bash, cela fait par: p> Comment cela peut-il être accompli dans Python? En d'autres termes, l'équivalent de [-t 0])? P> P>
5 Réponses :
$ echo ciao | python -c 'import sys; print sys.stdin.isatty()' False Of course, your GUI-based IDE might choose to "fool" you by opening a pseudo-terminal instead (you can do it yourself to other programs with pexpect, and, what's sauce for the goose...!-), in which case isatty or any other within-Python approach cannot tell the difference. But the same trick would also "fool" your example bash program (in exactly the same way) so I guess you're aware of that. OTOH, this will make it impossible for the program to accept input via a normal Unix "pipe"!A more reliable approach might therefore be to explicitly tell the program whether it must output to stdout or where else, e.g. with a command-line flag.
Il y a des moments où j'ai utilisé des drapeaux explicites tout en étincelant, mais parfois, je voudrais une solution automatique de la solution dans quelles circonstances seront nécessaires. Je vais toujours garder cette pensée pour le brûleur arrière, cependant.
Il existe plusieurs exemples de ceci sur Néage qui compte pour un troisième cas: en cours d'exécution à une invite de python interactive. p>
Je suis venu aimer OptParse pour CL analysant. Préférez-vous les getopts? Si oui, je suis curieux de savoir pourquoi. Je suis nouveau à la programmation et je suis impatient d'apprendre pourquoi et pourquoi.
Optparse est i> mieux. Mais GetOpt fonctionne la même chose en C, Python, Haskell, quelle que soit la langue que vous puissiez penser. Si vous travaillez dans de nombreuses langues différentes, vous pouvez le préférer.
J'ai nettoyé SE pour une réponse à cela, mais partout indiqué l'utilisation de Test Standard Entrée était la seule chose qui a fonctionné pour moi: P> sys.stdout.isatty () code> ou
os.isatty (sys.stdout.fileno ()) code >. Ni l'un ni l'autre de ces cas de test de l'interface graphique de l'interface graphique.
sys.stdin.isatty()
J'ai eu le même problème et j'ai fait comme suit:
import sys mode = 1 try: if sys.stdin.isatty(): mode = 0 except AttributeError: # stdin is NoneType if not in terminal mode pass if mode == 0: # code if terminal mode ... else: # code if gui mode ...
in Bash j'utilise ce script: Lorsque vous créez un raccourci de bureau pour appeler le script, la sortie est la suivante: p> #import os
result = os.popen("echo $TERM")
result2 = os.popen("env | grep TERM")
docs.python.org/library/os.html#os.isatty A> Faites ce dont vous avez besoin?
duplicache possible de Comment puis-je Vérifiez si un script Python a été démarré de manière interactive? Easy Way:
sys.stdout.isatty () code>
Notez que
ISATTY code> ne permettra pas de détecter correctement les tuyaux
sys.stdout.isatty () et os.isatty (0) sont exactement ce que je cherchais. Super. Merci. Si vous le ferez comme une réponse, je l'accepterai.
@Cobal, vous avez raison. C'est un duplicata du concept, je viens de demander d'une manière différente. Merci.
Dupliqué possible de Vérification de la coque interactive dans un script Python