Запуск gpg -e через Java ProcessBuilder - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь запустить следующую команду:

gpg -e -r recipientname file.txt

через Java с использованием API ProcessBuilder. Код будет использоваться в работе календаря позже.

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

gpg: [undisclosed]: There is no assurance this key belongs to the named user

sub  rsa2048/[undisclosed] 2019-03-22 [undisclosed] <[undisclosed]>
 Primary key fingerprint: [undisclosed]
      Subkey fingerprint: [undisclosed]

It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.

Use this key anyway? (y/N)

Я ввожу 'y', и мой зашифрованный файл генерируется.

Если я делаю то же самое с использованием Java следующим образом:

ProcessBuilder builder = new ProcessBuilder("gpg", "-e", "-r", "recipientname", "test.txt")
                    .directory(new File("."))
                    .redirectErrorStream(true);
            final Process process = builder.start();

            OutputStream output = process.getOutputStream();
            output.write("y".getBytes());
            output.flush();
            BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            System.out.println("test");
            process.waitFor();

Я получаю только первую строку вывода:

gpg: [undisclosed]: There is no assurance this key belongs to the named user

и JVM висит навсегда. Я подозреваю, что gpg запускает еще один подпроцесс под капотом, который генерирует все дополнительные выходные данные и запрашивает подтверждение пользователя, и если это так, я задаюсь вопросом, могу ли я в любом случае перехватить подпроцесс и взаимодействовать с ним из в моем коде Java?

Обратите внимание, что я предпочитаю по возможности избегать использования сторонних библиотек.

...