【发布时间】:2017-11-26 22:29:38
【问题描述】:
我运行下面附加的代码,但它仅在 字符串响应 中的命令完成后才给出输出。我希望在命令运行期间激活控制台窗口并获取命令的输出。
String command = "src\\youtube-dl"
+ " --max-downloads " + maxdown.getText()
+ " --retries " + noofretry.getText()
+ " --write-all-thumbnails" + sub.getText()
+ " " + url.getText();
String response = "";
try {
Process p = Runtime.getRuntime().exec(command);
InputStream in = p.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c = -1;
while((c = in.read()) != -1) {
baos.write(c);
System.out.flush();
response = response + new String(baos.toByteArray());
System.out.println(response);
}
} catch (Exception e) {
e.printStackTrace();
}
【问题讨论】:
-
你好像是直接运行
youtube-dl,所以这个问题和cmd.exe无关。控制台窗口不是 cmd。 -
如果您无法访问
youtube-dl的源代码,并且当StandardOutput是管道时它使用完全缓冲,那么您将无法轻松完成任何事情。它将在缓冲区满时(通常为 4 KB)或退出时将其缓冲区刷新到管道。变通方法很复杂,例如 DLL 注入和 API 挂钩或主动抓取控制台屏幕缓冲区。
标签: java output inputstream windows-console