当前位置: 首页 > 面试题库 >

ProcessBuilder重定向输出

严知
2023-03-14
问题内容

我正在尝试使用以下代码重定向在ProcessBuilder的帮助下启动的流程的输出

ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Map<String, String> env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
Process p = pb.start();

但是它以失败告终

线程“主”中的异常java.io.IOException:无法运行程序“ / myScript >> / myLogFile 2>&1
<&-&”:java.io.IOException:error =
2,java.lang中没有此类文件或目录.ProcessBuilder.start(ProcessBuilder.java:460)

当我只是通过“ / myScript”时,它工作正常

脚本是perl,关于失败的任何建议/评论?

我尝试将所有参数作为单独的参数传递,例如new ProcessBuilder("/myScript",">>","/myLogFile"),它会执行,但不会重定向到日志文件,也不会占用envVars。


问题答案:

Shell重定向运算符对未知ProcessBuilder。把你的命令在shell脚本并执行它。另外,使用bash -c,如图所示这里。



 类似资料:
  • 本文向大家介绍linux shell数据重定向(输入重定向与输出重定向)详细分析,包括了linux shell数据重定向(输入重定向与输出重定向)详细分析的使用技巧和注意事项,需要的朋友参考一下 在了解重定向之前,我们先来看看linux 的文件描述符。 linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操

  • 1. Shell 重定向 1.1 Shell 重定向是什么 我们在之前章节有学习 echo/printf 来将我们的需求输出,此时就是我们将系统的返回输出到我们标准终端,使得我们能够看到正常的输出的结果,Unix 命令默认的输入设备即 stdin 为键盘,标准和错误设备即 stdout 为显示器,我们利用重定向可以将输入改为文件,或者将输出重新定向到其他设备或文件中。 1.2 为什么要用重定向 我

  • 我正在创建一个使用服务代理运行多个模块的流程。这些模块将在流程结束时返回一个字符串,初始服务代理调用将返回并打印该字符串。但是,我来自流程构建器的进程没有返回我的字符串。我放置了print语句来告诉我不同模块何时运行,它打印正确的答案,但不会将其作为字符串返回给服务代理。 服务经纪人 翻译 文本代理 SB被赋予参数{"Trans,"german.txt, dog,="},它将[1]字符串传递给翻译

  • 到目前为止,我们在标准输出流上显示了数据。 我们还可以将数据重定向到文件。 print或printf语句后出现重定向。 AWK中的重定向就像shell命令中的重定向一样,除了它们是在AWK程序中编写的。 本章通过合适的示例解释重定向。 重定向运算符 重定向运算符的语法是 - 语法 (Syntax) print DATA > output-file 它将数据写入output-file 。 如果输出

  •   大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。 命令 说明 command > file 将输出重定向到 file。 command < file 将输入重定向到 file。 command >> file 将输出以

  • 我想用java代码调用一个外部程序,然后Google告诉我Runtime或ProcessBuilder可以帮助我完成这项工作。我试过了,结果发现java程序无法退出,这意味着子进程和父进程都将永远等待。它们要么挂起,要么陷入僵局。 有人告诉我原因是子进程的缓存太小了。当它试图将数据返回给父进程时,但是父进程没有及时读取它,然后他们两个都挂起了。所以他们建议我叉一个线程来负责读取子进程的缓存数据。我