Процесс не завершается при запуске из Java - PullRequest
1 голос
/ 21 мая 2019

Я запускаю WebTorrent-CLI из моего Java-приложения как отдельный процесс.Я использую zt-exec для управления процессом.Когда WebTorrent запускается с помощью следующей команды, он должен завершиться после загрузки файла с указанным индексом (значение --select).

"D:\downloadmanager\node\webtorrent.cmd" download "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel" --select 0 --out "D://nf/"

Как и ожидалось, webtorrent-cli завершается после загрузки0-й файл, когда указанная выше команда используется для его запуска из командной строки.Но когда я пытаюсь сделать то же самое из моего Java-приложения, он полностью игнорирует параметр --select и продолжает загружать другие файлы в торрент.

По сути, при запуске как процесс из Java webtorrent игнорирует все параметрыустановить (--select, --out или любой другой).Я должен отметить, что с библиотекой нет ничего плохого, потому что недавно я попытался заменить ее на commons-exec, и это ничего не решило.Кроме того, чтобы убедиться, что при запуске процесса передана правильная команда, я печатаю команду прямо перед вызовом executor.start().Приведенная выше команда копируется из вывода, полученного при печати команды, до начала процесса.Вот как процесс запускается:

@Override
public synchronized void start() throws IOException {
    if (mWasDownloadStarted || mWasDownloadFinished) return;

    mExec.getCommand().listIterator().forEachRemaining(s -> {
        System.out.print(s + " ");
    });

    mExec.start();
    setProcessId();

    mWasDownloadStarted = true;
    mWasDownloadStopped = false;
}

Вот как готовится команда:

private String buildCommand() {
    List <String> command = new ArrayList<>();
    command.add("\"" + mManager.mWTLocation + "\"");
    command.add("download");
    command.add("\"" + mManager.mMagnetUrl + "\"");

    if (mManager.mFileIndex >= 0) {
        command.add("--select " + mManager.mFileIndex);
    }

    if (mManager.mSaveTo != null) {
        command.add("--out \"" + mManager.mSaveTo + "\"");
    }

    mManager.mExec.command(command);

    String cmdStr = "";
    for (String s : command) {
        cmdStr = cmdStr.concat(s + " ");
    }

    return cmdStr.trim();
}

Что может быть не так?

1 Ответ

0 голосов
/ 21 мая 2019

Хорошо, я смог решить эту проблему.

Символ /, следующий по пути, указанному как значение --out, вызывал проблему. Чтобы это исправить, я добавил в node_modules/webtorrent-cli/bin/cmd.js строку для вывода аргументов, переданных webtorrent:

console.log(process.argv)

С / вывод этой строки был примерно таким:

[ 'D:\\downloadmanager\\node\\node.exe',
  'D:\\downloadmanager\\node\\node_modules\\webtorrent-cli\\bin\\cmd.js',
  'download',
  'magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel',
  '--select',
  '0',
  '--out',
  'D:\\nf"' ]

Обратите внимание на ", включенный в путь после D:\\nf. Когда / удаляется с пути, кавычка исчезает, и webtorrent ведет себя как ожидалось.

Я сомневаюсь, что это ошибка в webtorrent. Я думаю, что zt-exec (или, может быть, я) делал что-то глупое.

В некоторой степени не связано, но я думаю, что я должен также упомянуть, что мне пришлось заключать каждое значение для каждого параметра в кавычки, даже в индекс, чтобы избавиться от других неприятных ошибок (например, Error 87, the parameter is incorrect)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...