En bref: 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 vous plaît dites-moi ce que je fais mal
python
python-3.x
ça ne fonctionne pas
la source
la source
Réponses:
Si vous ne voulez pas qu'une fenêtre de terminal apparaisse 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.xdonc utilisez à la place:
la source
Pour résumer et compléter les réponses existantes:
python.exe
est une application console (terminal) pour lancer des scripts de type CLI .python.exe
ouvre une nouvelle fenêtre de console .sys.stdin
,sys.stdout
etsys.stderr
sont connectés à la fenêtre de la console .L'exécution est synchrone lorsqu'elle est lancée depuis une
cmd.exe
fenêtre de console ou PowerShell: voir le premier commentaire d' eryksun ci-dessous.pythonw.exe
est une application GUI pour lancer des scripts GUI / no-UI-at-all .sys.stdin
,sys.stdout
et nesys.stderr
sont PAS disponibles .print()
peut provoquer cela (dans 3.x, celaprint()
n'a tout simplement aucun effet).pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
(à partir de PowerShell :)
cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
pour capturer la sortie stdout et stderr dans des fichiers .Si vous êtes convaincu que l'utilisation de
print()
est la seule raison pour laquelle votre script échoue silencieusementpythonw.exe
et que vous n'êtes pas intéressé par la sortie stdout, utilisez la commande @ handle des commentaires:pythonw.exe yourScript.pyw 1>NUL 2>&1
Avertissement : Cette technique de redirection de sortie ne fonctionne pas lors de l'appel direct de
*.pyw
scripts ( par opposition à en passant le chemin du fichier de script à ). Voir le 2ème commentaire d' eryksun et ses suites ci-dessous.pythonw.exe
Vous pouvez contrôler lequel des exécutables exécute votre script par défaut - par exemple lorsqu'il est ouvert à partir de l'Explorateur - en choisissant la bonne extension de nom de fichier :
*.py
les fichiers sont par défaut associés (appelés) avecpython.exe
*.pyw
les fichiers sont par défaut associés (appelés) avecpythonw.exe
la source
> pythonw ls.pyw >nul 2>&1
(même si rien n'est écrit).start
commande. Il inspecte en fait lePEB
processus enfant pour déterminer s'il s'agit d'un processus console. Le processus hôte de la console (conhost.exe) ne se soucie pas de cela. Si vous utilisezsubprocess.Popen
pour attacher une autrepython.exe
instance à la console actuelle et que vous ne l'utilisez paswait
, vous aurez un désordre déroutant des deux processus en course pour accéder à la console simultanément.NtCreateUserProcess
. Si l'exécutable cible est un programme console, le système hérite inconditionnellement des descripteurs standard du parent. Mais pour un programme non-console, il doit être explicitement dit d'hériter des handles héritables du parent. Pour exécuter un fichier basé sur une association de fichier, cmd appelleShellExecuteEx
, qui n'hérite pas explicitement de descripteurs lorsqu'il appelleCreateProcess
=>NtCreateUserProcess
. Par conséquent, la redirection des E / S standard fonctionne dans cmd lors du démarrage des scripts .py de la console mais pas des scripts .pyw non-console.CreateProcess
avecbInheritHandles
passé commeTRUE
. Il ne se replie qu'enShellExecuteEx
cas d'CreateProcess
échec car la cible n'est pas un exécutable PE (par exemple, c'est un script .py) ou nécessite une élévation (par exemple osk.exe). Donc , lorsque vous exécutez directementpythonw.exe
oupyw.exe
, il héritera de cmdStandardInput
,StandardOutput
etStandardError
qui cmd ( en fait le CRT) par l' intermédiaire modifieSetStdHandle
avant et après l' appelCreateProcess
lorsque E / S standard est redirigé vers un tuyau, un fichier ou un périphérique.STARTUPINFO
poignées (hStdInput, hStdOutput, hStdErr), contrairement à Pythonsubprocess.Popen
. Il peut s'en tirer car c'est un programme à un seul thread. Ce n'est que grâce à cette conception que la redirection fonctionne du toutShellExecuteEx
(juste pour les programmes de console, comme indiqué) car l'API du shell GUI ne prend pas en charge les E / S standard.Voir ici: http://docs.python.org/using/windows.html
pythonw.exe "Cela supprime la fenêtre du terminal au démarrage."
la source
pythonw.exe
a des effets secondaires que votre programme peut échouer en silence s'il écrit dans le flux stdout / stderr - voir bugs.python.org/issue706263Si vous allez appeler un script python à partir d'un autre processus (par exemple, à partir de la ligne de commande), utilisez
pythonw.exe
. Sinon, votre utilisateur verra en permanence unecmd
fenêtre lançant le processus python. Il exécutera toujours votre script de la même manière, mais il n'empiétera pas sur l'expérience utilisateur.Un exemple pourrait être l'envoi d'un e-mail;
python.exe
fera apparaître une fenêtre CLI, enverra l'e-mail, puis fermera la fenêtre. Cela apparaîtra comme un éclair rapide et peut être considéré comme quelque peu ennuyeux.pythonw.exe
évite cela, mais envoie toujours l'e-mail.la source
python.exe
sera pas ouvrir un autre.J'avais du mal à faire fonctionner cela pendant un moment. Une fois que vous avez changé l'extension en .pyw, assurez-vous que vous ouvrez les propriétés du fichier et dirigez le chemin "ouvrir avec" vers pythonw.exe.
la source
D'après mon expérience, pythonw.exe est au moins plus rapide avec l'utilisation de pygame.
la source