Моя цель - выполнить git push программно, а не из окна консоли.Как выполнить git-push внутри процесса?
Для этой цели я создаю процесс, как:
val processbuilder=new ProcessBuilder(List("git.exe","push","origin","master").asJava)
process=processbuilder.start()
Теперь проблема заключается в том, что git.exe кажется, чтобы начать другой процесс, к выходу/ошибки и вход которого у меня нет доступа. Я знаю это, потому что, если я запускаю его без подключения к Интернету, он просто печатает сообщение об ошибке и выходит, как и должно. Однако, если я делаю то же самое с подключением к Интернету, он ничего не выводит на стандартный вывод/ошибку. Также я не могу уничтожить процесс в этом случае (см.: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4770092), что свидетельствует о том, что аутентификация происходит в отдельном процессе, который создается git.exe и к которому у меня нет доступа.
Я попытался обойти это, начав cmd.exe в качестве процесса и выпустить git push как команду, но и в этом случае запись пароля в стандартный ввод cmd.exe не влияет.
Платформа, которую я использую, - это Windows 10 + Scala sbt.
Каков выход из этого?
Edit:
Я пытаюсь сделать это с JavaFX на основе применения Scala, а не из программы консоли Scala.
Edit2:
Использование SYS апи здесь не решает проблему. Если вы попытаетесь выполнить gith-push через sys-api-вызов, то могут произойти две вещи:
Если подключение к Интернету отсутствует, оно выведет сообщение об ошибке в окне консоли приложения gui (у него есть один, если вы запустите это с запуском sbt).
Это интернет-соединение, после чего оно ничего не будет печатать, и вы не сможете выполнить аутентификацию. Процесс просто отделяется и становится недоступным для вас.
Дело в том, что git.exe, похоже, запускает подпроцесс, и у вас нет доступа к этому подпроцессу. Эта проблема особенная для Windows, на которую я дал ссылку в вопросе. Когда вы запускаете git в окне консоли Windows, тогда он заботится о входе и выходе подпроцессов для вас. Однако вы не находитесь в том же положении, что и операционная система.
К сожалению, был аналогичный ответ, который был удален. Я прокомментировал этот ответ в длину. Я больше не буду рисковать потерять длинный комментарий, поэтому я прокомментирую ваш ответ в вопросе. – sbtpr