有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

linux youtubedl从终端下载,但从java程序停止(同一命令)

我设法从终端下载embadded视频,但当我从java调用它时,这个程序不起作用。 这是我从java使用的

for(String url: reffererSet) {
        String command = "youtube-dl " + url;
        System.out.println(command);
        Process proc = Runtime.getRuntime().exec(command);

        BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        String line = "";
        while((line = reader.readLine()) != null) {
            System.out.print(line + "\n");
        }
    }

youtube-dl https://player.vimeo.com/video/2352345 --referer 'https://reffererUrl.html'

当我从终端执行时

[vimeo] 2352345: Downloading webpage
[vimeo] 2352345: Extracting information
[vimeo] 2352345: Downloading JSON metadata
WARNING: Unable to download JSON metadata: HTTP Error 404: Not Found

当我从java运行时开始下载视频,我只看到以下输出:

[vimeo] 2352345: Downloading webpage

并在不下载视频的情况下跳到下一个链接


共 (2) 个答案

  1. # 1 楼答案

    正如本所说,你应该使用完整的路径。程序并不总是在同一个/usr/bin/*文件夹中。对于未来的项目,你应该尝试使用/usr/bin/bash -c "command here"

  2. # 2 楼答案

    最有可能的解决方案是使用youtube-dl的完整路径,因此在Linux上可能是/usr/bin/youtube-dl。这是因为Runtime.getRuntime().exec实际上运行的是一个文件,而不是bash shell

    如果这不能解决您的问题,那么您还应该将流程的错误流写入标准输出,这将告诉您问题所在