Linux: при выполнении передачи через Java Runtime.exec() выдает ошибку

У меня немного странная ситуация. Я пишу Java-программу для автоматического взаимодействия с Transmission на моем Raspberry Pi (Linux).

У меня есть следующий код (упрощенный и отредактированный для удобства / безопасности):

String s;
String fullCommand = "transmission-remote -n username:password -a /location/to/file.torrent";
String[] cmd = fullCommand.split(" ");
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((s = br.readLine()) != null) {
   System.out.println("line: " + s);
}
p.waitFor();
System.out.println("exit: " + p.exitValue());
p.destroy();

Вывод, который я получаю, является "несуществующим или недопустимым торрент-файлом". Если я запускаю точно такой же скрипт в командной строке, я получаю успех (поэтому файл существует и является действительным).

Я читал, что Runtime.exec() имеет проблемы с пробелами. Отсюда и раскол (" "). Без него тоже не работает.

Я знаю, что Runtime.exec() не то же самое, что командная строка, но есть ли способ заставить это работать?

У меня есть обходной путь, но я бы хотел сделать это за один шаг. Если кому-то интересно: обходной путь - записать команду в файл.sh, сделать его исполняемым и запустить его с помощью Runtime.exec(). Это работает.

0 ответов

Другие вопросы по тегам