У вас две ошибки:
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();
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;
Если вы не хотите, чтобы окно терминала всплывало при запуске вашей программы, используйте pythonw.exe
; В противном случае используйте python.exe
Что касается синтаксической ошибки: print
теперь является функцией в 3.x . Вместо этого используйте:
print("a")
Чтобы обобщить и дополнить существующие ответы:
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
> pythonw ls.pyw >nul 2>&1
(хотя ничего не написано).
– handle
16 June 2016 в 08:06
NtCreateUserProcess
создается процессом пользовательского режима. Если целевой исполняемый файл является консольной программой, система безоговорочно наследует стандартные дескрипторы родителя. Но для не-консольной программы требуется явно указывать наследование наследуемых ручек родителя. Чтобы запустить файл на основе ассоциации файлов, вызовы cmd ShellExecuteEx
, которые явно не наследуют дескрипторы при вызове CreateProcess
= & gt; NtCreateUserProcess
. Следовательно, перенаправление стандартных операций ввода-вывода работает в cmd при запуске консольных сценариев .py, но не с консольными скриптами .pyw.
– eryksun
27 July 2016 в 22:42
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
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
избегает этого, но все равно отправляет электронное письмо.
python.exe
будет not i> открыть другой.
– mklement0
18 May 2015 в 14:19
См. здесь: http://docs.python.org/using/windows.html
pythonw.exe «Это подавляет окно терминала при запуске».
pythonw.exe
имеет побочные эффекты, которые ваша программа может терпеть неудачу, если она записывает поток stdout / stderr - см. bugs.python.org/issue706263
– anatoly techtonik
26 June 2013 в 11:38
Я изо всех сил пытался заставить это работать некоторое время. После того, как вы измените расширение на .pyw, убедитесь, что вы открываете свойства файла и направляете путь «open to» к pythonw.exe.