В чем разница между pythonw и python? [Дубликат]

У вас две ошибки:

  1. Вы снова и снова добавляете один и тот же экземпляр Player1 в список. Вы должны переместить Player1 user = new Player1(); в цикл, который добавляет игроков. Измените
    Player1 user = new Player1();
    
    // Tokenizing
    System.out.println("CSCI213 Players Management System");
    while (input.hasNextLine()) {
    
    на
    // Tokenizing
    System.out.println("CSCI213 Players Management System");
    while (input.hasNextLine()) {
        Player1 user = new Player1();
    
  2. Члены класса Player1 все статичны, поэтому, даже если вы исправите первую проблему, все экземпляры Player1 будут делиться этими членами. Вы должны изменить их на нестатические. Измените
    public class Player1 {
        static String loginname;
        static String password;
        static String chips;
        static String username;
        static String email;
        static String birthdate;
    
    на
    public class Player1 {
        String loginname;
        String password;
        String chips;
        String username;
        String email;
        String birthdate;
    
111
задан bernie 12 March 2013 в 22:53
поделиться

5 ответов

Если вы не хотите, чтобы окно терминала всплывало при запуске вашей программы, используйте pythonw.exe; В противном случае используйте python.exe

Что касается синтаксической ошибки: print теперь является функцией в 3.x . Вместо этого используйте:

print("a")
127
ответ дан bernie 22 August 2018 в 19:45
поделиться

Чтобы обобщить и дополнить существующие ответы:

  • python.exe является консольным (терминальным) приложением для запуска сценариев типа CLI. Если не запустить из существующего окна консоли, python.exe откроет новое окно консоли. Стандартные потоки sys.stdin, sys.stdout и sys.stderr подключены к окну консоли. Выполнение синхронно при запуске из окна консоли cmd.exe или PowerShell: см. Следующий комментарий к eryksun . Если было создано новое окно консоли, оно остается открытым до тех пор, пока скрипт не завершится. При вызове из существующего окна консоли приглашение блокируется до завершения сценария.
  • pythonw.exe - графическое приложение для запуска графических интерфейсов GUI / no-UI-at-all. Окно консоли не открывается. Выполнение является асинхронным: при вызове из окна консоли сценарий запускается только , и приглашение возвращается сразу, независимо от того, работает ли скрипт или нет. Стандартные потоки sys.stdin, sys.stdout и sys.stderr НЕ доступны. Внимание: если вы не предпримете дополнительные шаги, у этого есть потенциально неожиданные побочные эффекты: Необработанные исключения заставляют скрипт прерывать молча . В Python 2.x просто попытка использовать print() может привести к тому, что это произойдет (в 3.x, print() просто не действует). Чтобы предотвратить это из вашего сценария и узнать больше, см. этот ответ . Ad-hoc, вы можете использовать перенаправление вывода: Спасибо, @handle. pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt (из PowerShell: cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt) для записи вывода stdout и stderr в файлах . Если вы уверены, что использование print() - единственная причина, по которой ваш скрипт терпит неудачу с pythonw.exe, и вы не заинтересованы в выводе stdout, используйте команду @ handle из комментариев: pythonw.exe yourScript.pyw 1>NUL 2>&1 Caveat: Это перенаправление вывода метод not работает при вызове *.pyw скриптов непосредственно (в отличие от передачи пути файла сценария к pythonw.exe). См. Второй комментарий eryksun и последующие действия ниже.

Вы можете контролировать, какой из исполняемых файлов запускает ваш скрипт по умолчанию - например, при открытии из проводника - путем выбора правильного расширения имени файла:

  • *.py файлы по умолчанию связаны (вызывается) с файлами python.exe
  • *.pyw по умолчанию связаны (вызываются) с pythonw.exe
181
ответ дан Community 22 August 2018 в 19:45
поделиться
  • 1
    IMHO, the лучший ответ. – wap26 21 September 2015 в 14:55
  • 2
    PS: Он работает, когда я нажимаю stdout и stderr где-то: > pythonw ls.pyw >nul 2>&1 (хотя ничего не написано). – handle 16 June 2016 в 08:06
  • 3
    Системный вызов NtCreateUserProcess создается процессом пользовательского режима. Если целевой исполняемый файл является консольной программой, система безоговорочно наследует стандартные дескрипторы родителя. Но для не-консольной программы требуется явно указывать наследование наследуемых ручек родителя. Чтобы запустить файл на основе ассоциации файлов, вызовы cmd ShellExecuteEx, которые явно не наследуют дескрипторы при вызове CreateProcess = & gt; NtCreateUserProcess. Следовательно, перенаправление стандартных операций ввода-вывода работает в cmd при запуске консольных сценариев .py, но не с консольными скриптами .pyw. – eryksun 27 July 2016 в 22:42
  • 4
    Сначала оболочка cmd пытается CreateProcess с bInheritHandles передаваться как TRUE. Он возвращается только на ShellExecuteEx, когда CreateProcess терпит неудачу, потому что цель не является исполняемым файлом PE (например, это сценарий .py) или требует повышения (например, osk.exe). Поэтому при прямом запуске pythonw.exe или pyw.exe он наследует команды StandardInput, StandardOutput и StandardError cmd, которые cmd (на самом деле CRT) изменяет через SetStdHandle до и после вызова CreateProcess, когда стандартный ввод-вывод перенаправляется в канал, файл или устройство. – eryksun 28 July 2016 в 03:34
  • 5
    Обратите внимание, что cmd не использует дескрипторы STARTUPINFO (hStdInput, hStdOutput, hStdErr), в отличие от subprocess.Popen Python. Это может сойти с рук, потому что это однопоточная программа. Только из-за этой конструкции перенаправление работает вообще с ShellExecuteEx (только для консольных программ, как указано), потому что API-интерфейс GUI иначе не поддерживает стандартный ввод-вывод. – eryksun 28 July 2016 в 03:41

Если вы собираетесь вызывать скрипт python из какого-либо другого процесса (например, из командной строки), используйте pythonw.exe. В противном случае ваш пользователь будет постоянно видеть окно cmd, запускающее процесс python. Он все равно будет запускать ваш сценарий одинаково, но он не будет вторгаться в пользовательский интерфейс.

Примером может быть отправка электронной почты; python.exe появится окно CLI, отправьте электронное письмо, а затем закройте окно. Он будет выглядеть как быстрая вспышка и может считаться несколько раздражающим. pythonw.exe избегает этого, но все равно отправляет электронное письмо.

14
ответ дан Droogans 22 August 2018 в 19:45
поделиться
  • 1
    Правда, но повторите, например, из командной строки: «Если вы уже являются в окне консоли (терминала), тогда python.exe будет not открыть другой. – mklement0 18 May 2015 в 14:19

См. здесь: http://docs.python.org/using/windows.html

pythonw.exe «Это подавляет окно терминала при запуске».

17
ответ дан jon 22 August 2018 в 19:45
поделиться
  • 1
    pythonw.exe имеет побочные эффекты, которые ваша программа может терпеть неудачу, если она записывает поток stdout / stderr - см. bugs.python.org/issue706263 – anatoly techtonik 26 June 2013 в 11:38

Я изо всех сил пытался заставить это работать некоторое время. После того, как вы измените расширение на .pyw, убедитесь, что вы открываете свойства файла и направляете путь «open to» к pythonw.exe.

1
ответ дан Ngula 22 August 2018 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: