java - 为什么我的 Java 程序不能读取 Perl 的 STDERR?

标签 java perl stderr

我们有一个 Perl 程序来验证从 Java 程序调用的 XML。它无法写入标准错误并卡在打印位置。

Perl 正在写入 STDERR,Java 程序正在使用 getErrorStream() 函数读取 STDERR。但是 Perl 程序正在挂起以写入 STDERR。我怀疑 Java 函数完全阻塞了 STDERR 流,而 Perl 正在等待这个流被释放。

在 Perl 中有没有办法克服这个障碍并强制写入标准错误?由于 Java 仅执行读取操作,因此 API 不应根据 Java 文档锁定 STDERR 流。

Perl 代码片段是:

sub print_error
{
    print STDERR shift;
}

Java 代码片段是:

while ( getErrorStream() != null )
{
    SOP errorMessage;
}

提前感谢您的帮助。

谢谢, 马修·李菊

最佳答案

getErrorStream 不会读取 错误流,它只是获取错误流的句柄。由于它是一个管道,如果您从未真正读取过它,它将被填满并强制 Perl 程序阻塞。

你需要这样的东西:

Inputstream errors = getErrorStream();
while (errors.read(buffer) > 0) {
    SOP buffer;
}

关于java - 为什么我的 Java 程序不能读取 Perl 的 STDERR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355311/

相关文章:

regex - 通过ssh运行的perl正则表达式命令行

linux - 解密混淆的perl脚本

linux - 调用 Perl 时避免出现 "Setting Locale Failed"消息

java - C#与Java之间的TCP通信编码问题

java - 在 RecyclerView 关注之前的 EditText

perl - 这两个定义有什么区别?

c - 在 Windows 平台上,C 代码中的临时重定向 stderr 为 null。

windows - 从 Windows 命令中删除 stderr

java - 读取文本文件并将其写入java中的excel

java - 制作一个 "TransactionAction"内部类