pytonw.exe lub python.exe?

Krótko mówiąc: pythonw.exe nic nie robi, python.exe nic nie akceptuje (którego z nich powinienem użyć?)

Test.py:

print "a"

Okno 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>
Proszę, powiedz mi, co robię źle.
Author: bernie, 2012-03-14

5 answers

Jeśli nie chcesz, aby pojawiało się okno terminala podczas uruchamiania programu użyj pythonw.exe;
W przeciwnym razie użyj python.exe

Odnośnie błędu składni: print obecnie występuje w 3.x
Więc użyj zamiast:

print("a")
 131
Author: bernie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-14 16:33:34

Aby podsumować i uzupełnić istniejące odpowiedzi:

  • python.exe jest aplikacją konsolową (terminal) do uruchamiania skryptów typu CLI .

    • chyba że uruchamia się z istniejącego okna konsoli, python.exe otwiera nowe okno konsoli .
    • strumienie Standardowe sys.stdin, sys.stdout i sys.stderrpołączone z oknem konsoli .
    • Wykonanie jest synchroniczne Po uruchomieniu z cmd.exe lub Okno konsoli PowerShell: Zobacz eryksun ' s 1st komentarz poniżej.

      • jeśli zostało utworzone nowe okno konsoli, pozostaje ono otwarte do momentu zakończenia skryptu.
      • Po wywołaniu z istniejącego okna konsoli znak zachęty jest blokowany do momentu zakończenia skryptu.
  • pythonw.exe jest to aplikacja GUI do uruchamiania skryptów GUI/no-UI-at-all.

    • brak okna konsoli jest otwarte.
    • wykonanie jest asynchroniczne :
      • Po wywołaniu z okna konsoli, skrypt jest uruchamiany tylko , A znak zachęty powraca natychmiast, niezależnie od tego, czy skrypt jest nadal uruchomiony, czy nie.
    • strumienie Standardowe sys.stdin, sys.stdout i sys.stderrniedostępne.
      • Uwaga: jeśli nie podejmiesz dodatkowych kroków , ma to potencjalnie nieoczekiwaną stronę efekty :
        • nieobsługiwane wyjątki powodują, że skrypt przerywa po cichu.
        • W Pythonie 2.x, po prostu próba użycia print() może spowodować, że tak się stanie (W 3.x, print() po prostu nie ma efektu).
        • aby zapobiec temu z poziomu skryptu , A aby dowiedzieć się więcej, Zobacz moją odpowiedź.
        • Ad-hoc , możesz użyć przekierowania wyjścia:Dzięki., @ handle.
          pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
          (z PowerShell:
          cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt) do przechwytywania wyjścia stdout i stderr w plikach .
          Jeśli jesteś pewien, że użycie print() jest jedynym powodem, dla którego twój skrypt nie działa po cichu z pythonw.exe, a nie jesteś zainteresowany wyjściem stdout, użyj polecenia @ handle z komentarzy:
          pythonw.exe yourScript.pyw 1>NUL 2>&1
          Uwaga : ta technika przekierowania wyjścia nie działa , a nie podczas wywoływania *.pyw skryptów bezpośrednio (W przeciwieństwie do przekazywania ścieżka do pliku skryptu do pythonw.exe). Zobacz eryksun drugi komentarz i jego dalsze działania poniżej.

Możesz kontrolować, który z plików wykonywalnych domyślnie uruchamia Twój skrypt - na przykład po otwarciu z Eksploratora-przez wybierając odpowiednie rozszerzenie nazwy pliku :

  • *.py pliki są domyślnie skojarzone (wywołane) z python.exe
  • *.pyw pliki są domyślnie skojarzone (wywołane) z pythonw.exe
 191
Author: mklement0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:14

Zobacz tutaj: http://docs.python.org/using/windows.html

Pytonw.exe " wyłącza okno terminala przy starcie."

 17
Author: jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-14 16:34:20

Jeśli chcesz wywołać skrypt Pythona z innego procesu (powiedzmy z linii poleceń), użyj pythonw.exe. W przeciwnym razie, twój użytkownik będzie stale widzieć okno cmd uruchamiające proces Pythona. Nadal będzie uruchamiać skrypt tak samo, ale nie będzie ingerować w doświadczenie użytkownika.

Przykładem może być wysłanie wiadomości e-mail; python.exe wyświetli okno CLI, wyśle wiadomość e-mail, a następnie zamknie okno. Pojawi się jako szybki błysk i może być uważany za nieco irytujący. pythonw.exe , ale nadal wysyła e-mail.

 14
Author: Droogans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-14 16:39:58

Przez jakiś czas starałem się, żeby to zadziałało. Po zmianie rozszerzenia na .pyw, upewnij się, że otwierasz właściwości pliku i kierujesz ścieżkę "Otwórz za pomocą" do pythonw.exe.

 1
Author: Ngula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-27 05:39:14