Нет вывода на стандартный выход для Java Process - PullRequest
0 голосов
/ 25 августа 2018

Я выполняю mysql.exe из Java-процесса (в Windows 10, JDK 1.8 env.), Код такой:

String command="D:\\SW\\MySQL_8\\bin\\mysql.exe --user=root --password=password";

ProcessBuilder pBuilder=new ProcessBuilder(command.split(" "));
pBuilder=pBuilder.redirectOutput(new File("D:\\workspaces\\cas\\CASCAppliance_Common\\out\\out.txt"));
pBuilder=pBuilder.redirectError(new File("D:\\workspaces\\cas\\CASCAppliance_Common\\out\\err.txt"));

Process p=pBuilder.start();
OutputStream os=p.getOutputStream();
PrintWriter writer=new PrintWriter(os);

Если я выполняю mysql.exe из командной строки, я получаю следующий вывод:

Microsoft Windows [Version 10.0.17134.228]
(c) 2018 Microsoft Corporation. All rights reserved.

D:\SW>cd MySQL_8\bin

D:\SW\MySQL_8\bin>mysql --user=root --password=password
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Я попытался получить поток ввода из процесса после перенаправления потока ошибок, я получаю только следующее:

mysql: [Warning] Using a password on the command line interface can be insecure.

Я также попытался перенаправить ошибки и std out в файлы, однако файл err содержит приведенный выше текст, а файл std out ничего не содержит.

С другой стороны, если я выполняю cmd.exe и запускаю команду, скажем 'dir', я получаю требуемый список каталогов из InputStream процесса.

У меня вопрос: я что-то не так делаю или mysql.exe выполняется так, что невозможно получить вышеуказанный вывод из входного потока процесса.

1 Ответ

0 голосов
/ 25 августа 2018

Да, это о MySQL.(правка обновляется с @ dave_thompson_085)

Если запустить mysql из интерактивной оболочки, но перенаправить ввод и / или вывод, он подавляет баннер, подсказки, бокс таблицы и строки (N) (X) (Xс) ролик трейлер.

Обратите внимание, что даже без запроса он по-прежнему читает операторы SQL и выполняет их, а также отображает любой набор результатов - хотя, если выходные данные представляют собой канал, он буферизуется.И наоборот, если в Java-процессе, который имеет stdin и stdout на терминале, запускается mysql, наследующий их, он имеет полное интерактивное поведение.

...