扫描仪NextLine方法在运行YoutubeDL流程时还没准备好吗?

时间:2019-01-26 03:51:12

标签: java process io java.util.scanner

我正在尝试使用YoutubeDL下载Youtube视频(这不一定相关,该过程将运行并下载视频)。

当我设置扫描仪以尝试读取线程的输出并尝试显示ETA(在youtube-dl进程中显示哪个)时,就会出现真正的问题。

@Override
public boolean recieveTransmission() throws IOException {
    Process process = new ProcessBuilder("youtube-dl", "-f", "best", "--newline", "-o", getPath().toString(), this.url).inheritIO().start();
    try ( Scanner scanner = new Scanner(process.getInputStream())) {
        while (scanner.hasNextLine()) {
            var str = scanner.nextLine();
            System.out.println(str);
            //Check that we're on the right line that contains the ETA and percent
            if (str.contains("[download]") && str.contains("%") && str.contains("ETA")) {
                //Set Progress & ETA
                Pattern pattern = Pattern.compile("\\d+(\\.\\d{1,2})?%");
                Matcher matcher = pattern.matcher(str);
                this.progress = Double.parseDouble(matcher.group().replace("%", ""));
                pattern = Pattern.compile("/d/d:/d/d");
                matcher = pattern.matcher(str);
                this.ETA = matcher.group();
                System.out.println("F");
            }
        }
    }
    try {
        process.waitFor();
        System.out.println("Progress: " + this.progress + " ETA: " + this.ETA);
    } catch (InterruptedException ex) {
        Logger.getLogger(YoutubeUplink.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(StellarDiskManager.getOutputFolder().toAbsolutePath().toString());
    return true;
}

相反,发生的事情是(从调试器中的测试中)从没有进入while循环,这表明scanner.hasNextLine方法从不成立。我不确定这是怎么回事。

我制作了一个简短的视频,说明发生了什么。 (https://youtu.be/qPKu-ykTo2A

为清楚起见,youtube-dl进程在使用--newline进行下载时输出如下行:[download] 1.2% of 41.17MiB at 1.69MiB/s ETA 00:24

0 个答案:

没有答案