gpt4 book ai didi

java - 从 java 程序运行 bash 脚本时的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:25 27 4
gpt4 key购买 nike

我有一个脚本(准确地说是 KSH 脚本)使用 curl 命令从 FTP 服务器下载 3 个文件。

当我手动运行我的脚本时,即通过执行命令 ./ftp_download.sh XXX(XXX 是脚本的参数),下载正确完成。

因为我想从 Java 程序运行脚本,所以我制作了一个简短的 Java 类,其中包含:

public class Run {

private static final String CMD = "/.../sh/ftp_download.sh XXX";

public static void main(String[] args) {
System.out.println("========================================================");
BufferedReader out = null;
try {
long startTime = System.currentTimeMillis();
String strOutputline;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
Process processus = Runtime.getRuntime().exec(CMD);
out = new BufferedReader(new InputStreamReader(processus.getInputStream()));
while ((strOutputline = out.readLine()) != null) {
now.setTime(System.currentTimeMillis());
System.out.println(sdf.format(now) + " " + strOutputline);
}
System.out.println("RESULT : " + processus.waitFor());
out.close();
processus.destroy();
long duration = System.currentTimeMillis() - startTime;
System.out.println("Duration : " + duration);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("========================================================");
System.out.println("END");
}

}

但是,当我运行这个简单的程序时,它只是在恰好 3 分 20 秒后卡住(这个持续时间始终相同,即使我多次运行 Java 程序也是如此)。通过卡住,我的意思是 Java 程序仍在运行(curl 进程也是如此)但下载的文件不再增长(即 curl 不会继续下载任何数据)...

因此,我从未在控制台中打印出 RESULT: xxx 行...

什么可以解释这种奇怪的行为?

ps:在不久的将来,我将更改我的项目以便使用 Apache commons-net 库下载这些文件,但我真的想了解这种奇怪的行为!


感谢 derobert,我终于设法解决了这个问题。一些解释:在正常模式下,curl 正在显示一个进度信息(一个包含下载数据量、剩余时间等的表格)。一段时间后,缓冲区似乎已完全填满,这就是进程卡住的原因...

最佳答案

我不是 Java 用户,而是 Unix 用户,有一点似乎很明显:stdout 或 stderr 上的缓冲区正在填满,然后 curl 发生阻塞。

如果您在静默模式下运行 curl,如 curl --silent,它是否有效?

查看 Java 文档,您似乎还想使用 getErrorStream除了 getInputStream。

关于java - 从 java 程序运行 bash 脚本时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com