以下是我的问题的代码片段:
Process process = Runtime.getRuntime().exec(command);
if (process.waitFor() != 0)
throw new Exception("error");
reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
正在运行的进程正在产生巨大的输出。如果我将输出重定向到一个文件,则过程终止的速度比在屏幕上打印输出(标准输出)更快。由于磁盘的
我正在尝试使用Java语言中的进程或ProcessBuilder对象来模拟下面的bash shell脚本的功能。我不是100%清楚我是如何为标准输入做重定向的。我如何才能做到这一点呢?
#
# Redirect shell echo command from standard output to file
# This will construct the input file
#
exec 1> $STDIN
echo -e "$NFILE\n$GFILE\n$INPUT\n$OUTPUT\n$CAX"
exec 1>&-
#
# Run exe
我目前正在创建一个控制台应用程序来与git交互。这可以很好地将命令的输出重定向到控制台应用程序,但是现在一些命令会提示输入,比如PassPhrase或y/n for owerwrite。如何重定向这些提示并要求用户输入。
var process = new Process();
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectS
The
要重定向标准输入、标准输出或标准错误流,分别调用Console.SetIn、Console.SetOut或Console.SetError方法。使用这些流的I/O操作是同步的,这意味着多个线程可以从流中读取或写入流。这意味着,如果对象表示控制台流,通常是异步的方法(如TextReader.ReadLineAsync )将同步执行。
这是否意味着即使将输出重定向到文件,该代码也将以同步方式执行?
Console.Out.WriteLineAsync("Hello World Async");
现实场景是:如果我的程序输出日志到stdout,并且以重定向到文件或管
我有一个使用输入重定向的程序,在某些情况下,我想开始从键盘输入。我该如何重定向输入呢?
我按如下方式运行该程序
java SomeClass < data.txt
代码如下所示
java.util.Scanner = new java.util.Scanner(System.in);
//Process the data from data.txt
//Here I want to be able to receive input from the keyboard, but input still only looks for input from data.txt
有没有什么方法可
如何从Java程序运行外部命令(通过shell),这样就不会发生重定向,然后等待命令结束?我希望外部程序的文件描述符与Java程序的文件描述符相同。特别是,我不希望将输出重定向到程序正在读取的管道。让Java程序中继输出并不是一个解决方案。
这意味着对的简单调用不是解决方案。我假定涉及到,但是如何指定输出和错误流必须与调用的Java相同?
class A {
public static void main(String[] args) {
try {
ProcessBuilder pb = new ProcessBuilder("echo
我想从java程序中运行一个shell脚本。这个shell脚本调用一个需要一个大文件作为资源的系统库。
我的java程序为文档中的每个单词调用这个脚本。如果我一次又一次使用Runtime.exec()调用这个脚本,所花费的时间非常长,因为加载资源需要很多时间。
为了克服这一问题,我想编写shell脚本如下(为了使它在后台连续运行):
count=0
while count -lt 10 ; do
read WORD
//execute command on this line
done
我需要在我的java程序中检索命令的输出并进一步处理它。我应该如何编码I/O操作以完成此
当我在一个单独的进程中执行一个命令时,例如通过使用Runtime.getRuntime().exec(...)方法,其JavaDoc声明:
Executes the specified command and arguments in a separate process.
我需要对这个过程中的流做些什么,因为我知道这个过程应该一直存在直到Java程序存在为止?(这是一个细节,但是Java程序负责杀死这个过程,并且这个过程本身有一个安全内置的--如果它注意到导致他不再运行的Java程序,它就会自杀)。
如果我们认为这个过程根本不产生任何输出(例如,因为所有错误消息和stdout都重定向到/de
我正在尝试使用Java的ProcessBuilder类来执行一个包含管道的命令。例如:
ls -l | grep foo
但是,我得到一个错误:
ls: |: no such file or directory
然后是:
ls: grep: no such file or directory
尽管该命令在命令行中运行良好,但我不能让ProcessBuilder执行将其输出重定向到另一个命令的命令。
有什么方法可以做到这一点吗?