jjzjj

ProcessBuilder

全部标签

java - 如何在 Windows 和 JDK 6u45 上将进程输出通过管道传输到文件

我有以下Windows批处理文件(run.bat):@echooffechohellobatchfiletosysout以及以下运行批处理文件并将输出重定向到文件的java代码:publicstaticvoidmain(String[]args)throwsIOException{System.out.println("Currentjavaversionis:"+System.getProperty("java.version"));ProcessBuilderpb=newProcessBuilder("cmd.exe","/c","run.bat",">>","stdout.txt

java - 如何将 InputStream 通过管道传输到 ProcessBuilder

请往下看第二次更新。我不想改变这个问题之前的上下文。我正在使用来自Java应用程序的wkhtmltoimage。使用它的标准方法是-path-to-exehttp://url.com/image.png。根据他们的文档,如果我们写一个-而不是输入URL,输入将转换为STDIN。我正在使用ProcessBuilder启动流程-ProcessBuilderpb=newProcessBuilder(exe_path,"-",image_save_path);Processprocess=pb.start();现在我不知道如何将输入流通过管道传输到这个进程。我将一个模板文件读入了DataInp

java - 从 Java 同步运行 shell 脚本

我正在尝试从Java执行BashShell脚本,使用这段代码它运行良好。publicvoidexecuteScript(){try{newProcessBuilder("myscript.sh").start();System.out.println("Scriptexecutedsuccessfully");}catch(IOExceptione){e.printStackTrace();}}以上代码异步运行良好。但是我想实现的是同步执行代码。我希望Java进程等到脚本执行完成后再执行下一批代码。总而言之,我希望在批处理文件(“myscript.sh”)完成执行后执行“打印语句-脚本

java - 使用空格将多个参数传递给 ProcessBuilder

我想将多个参数传递给processBuilder并且参数之间用空格分隔。这是命令,String[]command_ary={dir+"library/crc","-s",fileName,"",addressRanges};我需要在“fcrc”之后和“-p”之后以及“文件名”和“地址范围”之间提供一个空格。谢谢 最佳答案 您不需要包含空格。ProcessBuilder将为您处理。只需将您的参数一一传递,不要空格:ProcessBuilderpb=newProcessBuilder(dir+"library/crc","-s",fil

Java ProcessBuilder process.destroy() 不杀死 winXP 中的子进程

我有一个java应用程序,它使用ProcessBuilder来准备操作系统命令并给我一个Process对象。(实际的操作系统命令是使用cygwin通过ssh进行rsync)。这在Windows中运行良好,但是如果我想使用process.destroy()停止进程,它不会终止子ssh和rsync进程.....我必须使用Windows任务管理器手动杀死它们..在我调用destroy();之前,是否可以获取进程的OutputStream并以某种方式发送ctrl-c?如果有人对解决方法有任何想法,那就太好了。谢谢, 最佳答案 我还认为模拟C

java - 从 Java 运行交互式命令行应用程序

我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,它可以很好地处理运行完成命令。例如,这将在工作目录中使用参数“myArg”运行“myProgram”:ListcommandLine=newArrayList();commandLine.add("myProgram");commandLine.add("myArg");ProcessBuilderbuilder=newProcessBuilder(commandLine);builder.redirectErrorStream(true);Processprocess=

java - ProcessBuilder 与 Runtime.exec()

我正在尝试使用Inkscape的命令行功能在Java中创建一个前端应用程序来处理批量SVG转换。我正在获取并更新来自https://sourceforge.net/projects/conversionsvg/的代码.原始开发人员通过Runtime.getRuntime().exec(String)处理调用Inkscape的方式。我遇到的问题是使用methodA和methodB之间存在一些不一致。我创建了一个简单的Java测试项目来演示正在执行的不同操作。CallerTest.javapackageconversion;importjava.io.IOException;publicc

java - ProcessBuilder和Process.waitFor(),它等了多久?

我正在使用ProcessBuilder从java执行一个.exe文件类和Process类(class)。解释我在做什么:builder=newProcessBuilder(commands);builder.redirectErrorStream(true);Processprocess=builder.start();process.waitFor();我只是想知道,“waitFor()”要等多久?是等到我的.exe执行完毕,还是等到它执行完毕?我的.exe是编译好的AutoIt脚本。这意味着,可能会有像鼠标移动这样的交互,这需要一些时间。所以我需要知道我的Java代码在调用.exe

java - 如果父级不使用 Java 中的 stdout/stderr,为什么进程会挂起?

我知道,如果您在Java中使用ProcessBuilder.start启动外部进程,您必须使用它的stdout/stderr(例如,参见here)。否则外部进程会在启动时挂起。我的问题是为什么它以这种方式工作。我的猜测是JVM将执行进程的stdout/stderr重定向到管道,如果管道没有空间,则写入管道block。有道理吗?现在我想知道为什么Java这样做。这种设计背后的基本原理是什么? 最佳答案 Java在这方面没有做任何事情。它只是使用操作系统服务来创建管道。所有Unix类操作系统和Windows在这方面的行为都相同:在父子之

java - Process Builder waitFor() 问题和打开文件限制

我继承了一些代码:Processp=newProcessBuilder("/bin/chmod","777",path).start();p.waitFor();基本上,将键/值对作为文件存储在磁盘上是出于一些古老且高度基于巫术的原因。我真的不想深入。但是,我留下了一堆IO异常:Exception:Cannotrunprogram"/bin/chmod":java.io.IOException:error=24,ToomanyopenfilesMessage:Cannotrunprogram"/bin/chmod":java.io.IOException:error=24,Tooman