Para encurtar a história: pythonw.exe
não faz nada, python.exe
não aceita nada (qual devo usar?)
test.py:
print "a"
Janela 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>
Por favor, diga-me o que estou fazendo de errado.
python
python-3.x
não funciona
fonte
fonte
Respostas:
Se você não deseja que uma janela do terminal seja exibida quando você executa o programa, use
pythonw.exe
;Caso contrário, use
python.exe
Com relação ao erro de sintaxe:
print
agora é uma função no 3.xEntão, use:
fonte
Para resumir e complementar as respostas existentes:
python.exe
é um aplicativo de console (terminal) para ativar scripts do tipo CLI .python.exe
abre uma nova janela de console .sys.stdin
,sys.stdout
esys.stderr
está ligado à janela do console .A execução é síncrona quando iniciada a partir de uma
cmd.exe
janela do console ou do PowerShell: Veja o primeiro comentário de eryksun abaixo.pythonw.exe
é um aplicativo GUI para iniciar scripts GUI / no-UI-at-all .sys.stdin
,sys.stdout
esys.stderr
são não disponível .print()
pode fazer com que isso aconteça (no 3.x,print()
simplesmente não tem efeito).pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
(do PowerShell:)
cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
para capturar a saída stdout e stderr nos arquivos .Se você está confiante de que o uso de
print()
é o único motivo pelo qual seu script falha silenciosamentepythonw.exe
e não está interessado na saída stdout, use o comando @ handle nos comentários:pythonw.exe yourScript.pyw 1>NUL 2>&1
Aviso : Esta técnica de redirecionamento de saída não funciona ao chamar
*.pyw
scripts diretamente ( em vez de passar o caminho do arquivo de script parapythonw.exe
). Veja o segundo comentário de eryksun e seus follow-ups abaixo.Você pode controlar qual dos executáveis executa seu script por padrão - como quando aberto no Explorer - escolhendo a extensão de nome de arquivo correta :
*.py
por padrão, os arquivos são associados (chamados) apython.exe
*.pyw
por padrão, os arquivos são associados (chamados) apythonw.exe
fonte
> pythonw ls.pyw >nul 2>&1
(mesmo que nada esteja escrito).start
comando Na verdade, ele inspeciona oPEB
processo filho para determinar se é um processo do console. O processo de host do console (conhost.exe) não se importa com isso. Se você costumasubprocess.Popen
anexar outrapython.exe
instância ao console atual e não owait
faz, terá uma confusão confusa dos dois processos correndo para acessar o console simultaneamente.NtCreateUserProcess
. Se o executável de destino for um programa de console, o sistema herda incondicionalmente os identificadores padrão do pai. Mas para um programa que não seja do console, é necessário que seja explicitamente instruído a herdar os identificadores herdáveis do pai. Para executar um arquivo com base em uma associação de arquivos, o cmd chamaShellExecuteEx
, que não herda explicitamente os identificadores quando chamaCreateProcess
=>NtCreateUserProcess
. Consequentemente, o redirecionamento de E / S padrão funciona em cmd ao iniciar scripts .py do console, mas não scripts .pyw que não são do console.CreateProcess
combInheritHandles
passou comoTRUE
. Ele só retornaShellExecuteEx
quandoCreateProcess
falha porque o destino não é um executável do PE (por exemplo, é um script .py) ou requer elevação (por exemplo, osk.exe). Portanto, quando você executa diretamentepythonw.exe
oupyw.exe
, ele herdará os cmd'sStandardInput
,StandardOutput
eStandardError
, qual cmd (na verdade o CRT) modifica viaSetStdHandle
antes e depois da chamadaCreateProcess
quando a E / S padrão é redirecionada para um canal, arquivo ou dispositivo.STARTUPINFO
alças (hStdInput, hStdOutput, hStdErr), ao contrário do Pythonsubprocess.Popen
. Ele pode se safar disso porque é um programa de thread único. É somente devido a esse design que o redirecionamento funcionaShellExecuteEx
(apenas para programas de console, conforme observado), porque a API do shell da GUI não tem suporte para E / S padrão.Veja aqui: http://docs.python.org/using/windows.html
pythonw.exe "Isso suprime a janela do terminal na inicialização."
fonte
pythonw.exe
tem efeitos colaterais que seu programa pode falhar silenty se escreve em stdout stream / stderr - ver bugs.python.org/issue706263Se você quiser chamar um script python de outro processo (por exemplo, na linha de comando), use
pythonw.exe
. Caso contrário, seu usuário verá continuamente umacmd
janela iniciando o processo python. Ele ainda executará seu script da mesma forma, mas não interferirá na experiência do usuário.Um exemplo pode estar enviando um email;
python.exe
irá aparecer uma janela da CLI, enviar o email e fechar a janela. Aparecerá como um flash rápido e pode ser considerado um pouco irritante.pythonw.exe
evita isso, mas ainda envia o email.fonte
python.exe
será não abrir outra.Eu estava lutando para fazer isso funcionar por um tempo. Depois de alterar a extensão para .pyw, abra as propriedades do arquivo e direcione o caminho "abrir com" para pythonw.exe.
fonte
Na minha experiência, o pythonw.exe é mais rápido, pelo menos, com o uso de pygame.
fonte