206 votes

pythonw.exe ou python.exe ?

Pour faire court : pythonw.exe ne fait rien, python.exe n'accepte rien (lequel dois-je utiliser ?)

test.py :

print "a"

Fenêtre CMD :

C:\path>pythonw.exe test.py
<BLANK LINE>
C:\path>

C:\path>python.exe test.py
  File "C:\path\test.py", line 7
    print "a"
            ^
SyntaxError: invalid syntax

C:\path>

S'il te plaît, dis-moi ce que je fais de terriblement mal.

22 votes

Malheureusement, cela mélange les deux aspects python vs pythonw (généralement l'aspect le plus intéressant) et un changement de syntaxe de base de python2 à python3. sans vouloir critiquer le PO qui ne pouvait pas savoir à l'avance, mais néanmoins cela entache la valeur de cette question en tant que le site La meilleure ressource sur python w .

363voto

mklement0 Points 12597

Résumer et compléter les réponses existantes :

  • python.exe est une application de type console (terminal) pour lancer des scripts de type CLI (applications console) .

    • Sauf si elle est exécutée à partir d'une fenêtre de console existante, python.exe ouvre une nouvelle fenêtre de console .

    • Flux standard sys.stdin , sys.stdout y sys.stderr son connecté à la fenêtre de la console .

    • L'exécution est synchrone lorsqu'il est lancé à partir d'un cmd.exe ou la fenêtre de la console PowerShell : Ver eryksun 1er commentaire ci-dessous.

      • Si une nouvelle fenêtre de console a été créée, elle reste ouverte jusqu'à ce que le script se termine.
      • Lorsqu'il est invoqué à partir d'une fenêtre de console existante, l'invite est bloquée jusqu'à ce que le script se termine.
  • pythonw.exe est une application GUI pour lancer des scripts avec interface graphique ou sans interface graphique. .

    • PAS de fenêtre de console est ouvert.
    • L'exécution est asynchrone :
      • Lorsqu'il est invoqué à partir d'une fenêtre console, le script est simplement a lancé et l'invite revient immédiatement, que le script soit toujours en cours d'exécution ou non.
    • Flux standard sys.stdin , sys.stdout y sys.stderr son NON disponible .
      • Attention : A moins que vous ne preniez des mesures supplémentaires ce qui a des effets secondaires potentiellement inattendus :
        • Exceptions non gérées provoquent le script à abandonner en silence .
        • Dans Python 2.x, le simple fait d'essayer d'utiliser print() peut faire en sorte que cela se produise (en 3.x, print() n'a tout simplement aucun effet).
          • A empêcher cela depuis votre script. et pour en savoir plus, voir cette réponse de la mienne.
          • Ad-hoc vous pouvez utiliser redirection des sorties : Merci, @handle.
            pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
            (de PowerShell :
            cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt ) pour capturer les sorties stdout et stderr en fichiers .
            Si vous êtes sûr que l'utilisation de print() est la seule raison pour laquelle ton script échoue silencieusement avec pythonw.exe et que vous n'êtes pas intéressé par la sortie stdout, utilisez la commande de @handle dans les commentaires :
            pythonw.exe yourScript.pyw 1>NUL 2>&1
            Caveat : Cette technique de redirection de la sortie ne no lorsque l'on invoque *.pyw scripts directement (par opposition à la transmission du chemin d'accès au fichier script à la commande pythonw.exe ). Ver eryksun Le deuxième commentaire de l'auteur et ses compléments sont présentés ci-dessous.

Vous pouvez contrôler lequel des exécutables exécute votre script par défaut. - comme lorsqu'il est ouvert depuis l'Explorer - par choisir la bonne extension de nom de fichier :

  • *.py sont par défaut associés (invoqués) à des fichiers de type python.exe
  • *.pyw sont par défaut associés (invoqués) à des fichiers de type pythonw.exe

193voto

bernie Points 44206

Si vous ne voulez pas qu'une fenêtre de terminal s'ouvre lorsque vous exécutez votre programme, utilisez pythonw.exe ;
Sinon, utilisez python.exe

Concernant l'erreur de syntaxe : print est maintenant une fonction dans 3.x
Utilisez donc à la place :

print("a")

1 votes

En exécutant un fichier .pyw à partir de Notepad++, j'obtiens toujours une fenêtre de console. Pour éviter cela, je dois double-cliquer sur le nom du fichier pour ouvrir l'application. Ce n'est qu'à ce moment-là que je ne vois que l'interface graphique et pas de console.

21voto

jon Points 2148

Voir ici : http://docs.python.org/using/Windows.html

pythonw.exe "Ceci supprime la fenêtre du terminal au démarrage".

9 votes

pythonw.exe a des effets secondaires qui font que votre programme peut échouer silencieusement s'il écrit dans un flux stdout/stderr - voir bugs.python.org/issue706263

21voto

Droogans Points 2098

Si vous comptez appeler un script python à partir d'un autre processus (disons, à partir de la ligne de commande), utilisez pythonw.exe . Sinon, votre utilisateur verra continuellement un cmd qui lance le processus python. Votre script sera exécuté de la même manière, mais il n'y aura pas d'intrusion dans l'expérience de l'utilisateur.

Un exemple pourrait être l'envoi d'un courriel ; python.exe fera apparaître une fenêtre CLI, enverra le courriel, puis fermera la fenêtre. Cela apparaîtra comme un flash rapide, et peut être considéré comme quelque peu ennuyeux. pythonw.exe évite cela, mais envoie quand même le courriel.

6 votes

C'est vrai, mais à propos de "disons, à partir de la ligne de commande" : Si vous avez déjà sont dans une fenêtre de console (terminal), puis python.exe sera no en ouvrir un autre.

3voto

Ngula Points 37

Je me suis battu pour que ça marche pendant un moment. Une fois que vous avez changé l'extension en .pyw, assurez-vous d'ouvrir les propriétés du fichier et de diriger le chemin "ouvrir avec" vers pythonw.exe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X