首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有重定向恐怖流的进程生成器挂在读行中

带有重定向恐怖流的进程生成器挂在读行中
EN

Stack Overflow用户
提问于 2022-03-24 11:17:50
回答 1查看 130关注 0票数 1

我想使用process运行驻留在当前位置的隐藏脚本文件。使用以下代码

代码语言:javascript
复制
// System.out.println("line"+reader.readLine());
ProcessBuilder builder = new ProcessBuilder(shfile.getAbsolutePath());  
builder.redirectErrorStream(true);  
Process process = builder.start();  
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));  
String output = null;  
System.out.println("out");  //===printing this
while (null != (output = br.readLine()))
{  
    System.out.println("in");   //not printing this
    System.out.println(">>"+output);   
}  
int  rs = process.waitFor();

但是它挂在br.readline()中。但是,当我在终端中使用以下命令运行相同的脚本文件时

代码语言:javascript
复制
sh .script.sh

它执行并给出预期的结果。

我查看了论坛中的所有循环,每个人都要求处理线程中的输入流和错误流,或者重定向错误流。我添加了一个重定向错误流,但它仍然挂起。

当我按ctrl+c时,它会打印输出和退出的初始行。我的脚本文件的内容

代码语言:javascript
复制
#!/bin/sh
cd /home/ats/cloudripper/lke_factory_asb_v2/lk_assets_factory_release/
sh ./LKE_run_Diablo.sh 0a0e0c3dc893

那么如何处理这种情况。

EN

回答 1

Stack Overflow用户

发布于 2022-03-24 12:22:10

Process有特殊的API来重定向子进程输入、输出和错误流。请参见文档,如果您需要子进程和父进程使用相同的控制台,则应该使用继承模式重定向。举个例子:

代码语言:javascript
复制
public class ChildProcessOutputProxy {
    
    public static void main(String[] args) {
        ProcessBuilder builder = new ProcessBuilder("whoami");
        builder.redirectOutput(Redirect.INHERIT);
        builder.redirectErrorStream(true);  
        try {
            var child = builder.start();
            child.waitFor();
        } catch (IOException e) {
            System.err.println(e.getMessage());
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }  
    }
    
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71601515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档