我试图从我的Java进程启动另一个Java进程.问题是我希望Windows控制台出现,而AnotherApp要写入该控制台.
此Java代码段确实启动了一个新进程,但未显示控制台.
ProcessBuilder pb = new ProcessBuilder("cmd", "/k", "java", "-jar", "AnotherApp.jar");
pb.start();
Run Code Online (Sandbox Code Playgroud)
如果我从Start - Run运行
cmd /k java -jar AnotherApp.jar
Run Code Online (Sandbox Code Playgroud)
然后创建一个新的控制台并启动java进程.
好的,我有一个通过 ProcessBuilder 运行的 python 脚本。一切正常。我遇到的问题是每当我将参数传递到 python 脚本中时,python 脚本都会以unrecognized argumets. 但如果我采取确切的命令并将其复制并粘贴到命令提示符中,它就会运行得很好。有什么帮助吗?这是我现在的总体想法:
ProcessBuilder builder = new ProcessBuilder("C:\Python33\" + "python.exe","-u", "C:\...\script.py", "--arg1 " + "argumentValue");
p = builder.start();
Run Code Online (Sandbox Code Playgroud) 我只是想测试运行 Eclipse 项目目录中的 shell 脚本。
new ProcessBuilder("scripts/test.sh").start();
Run Code Online (Sandbox Code Playgroud)

出现此错误:
java.io.IOException:无法运行程序“scripts/test.sh”:CreateProcess error=2,系统找不到指定的文件
我使用 Process Builder 运行 shell 命令:
try {
ProcessBuilder lmBuilder = new ProcessBuilder("/home/istanbul/srilm/bin/i686-m64/ngram-count", "-text", modelPath, "-order", "3", "-lm", modelOutputPath);
lmBuilder.redirectErrorStream();
final Process lmProcess = lmBuilder.start();
int result = lmProcess.waitFor(); //result becomes 0
InputStream is = lmProcess.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
当我检查命令的输出时,我发现它工作正常。当我通过 shell 运行它时,我看到输出:
warning: discount coeff 1 is out of range: 0
warning: discount …Run Code Online (Sandbox Code Playgroud) 当尝试使用 附加输出ProcessBuilder到文件
时redirectOutput(Redirect.appendTo(outFile).file()),它总是覆盖文件中的现有数据,而不是将数据附加到现有文件。
如何从 processbuilder 将数据附加到现有文件
任何帮助,将不胜感激。
我正在构建一个具有以下流程的应用程序:
\nffmpeg在最后,但对于这个简单的可重现用例,它只是cat让数据通过它传递)所以我正在执行以下操作:
\nProcessBuilder结合使用Flow.fromSinkAndSource来构建此外部流程执行的流程完整代码示例:
\nimport akka.actor.ActorSystem\nimport akka.stream.scaladsl.GraphDSL.Implicits._\nimport akka.stream.scaladsl._\nimport akka.stream.ClosedShape\nimport akka.util.ByteString\n\nimport java.io.{BufferedInputStream, BufferedOutputStream}\nimport java.nio.file.Paths\nimport scala.concurrent.duration.Duration\nimport scala.concurrent.{Await, ExecutionContext, Future}\n\nobject MyApp extends App {\n\n // When this is changed to something above 15, the graph just stops\n val PROCESSES_COUNT = Integer.parseInt(args(0))\n\n println(s"Running with ${PROCESSES_COUNT} processes...")\n\n implicit val system = ActorSystem("MyApp")\n implicit …Run Code Online (Sandbox Code Playgroud) 是否可以将ProcessBuilder与GWT一起使用?当我声明一个新的ProcessBuilder的实例时,我得到:
java.lang.ProcessBuilder is not supported by Google App Engine's Java runtime environment
Run Code Online (Sandbox Code Playgroud) 当我尝试从命令行执行jar时,它工作正常.我试图在另一个java程序中执行相同的jar,如下所示:
ProcessBuilder pb = new ProcessBuilder("java", "-Xmx1024m -Xms1024m -DTOOLS_DIR="/home/IM/work/dist" -Daoi=whole -jar "/home/IM/work/dist/idt_tools.jar");
pb.start()
Run Code Online (Sandbox Code Playgroud)
但是,这给了我一个ClassNotFoundException
ERR>Exception in thread "main" java.lang.NoClassDefFoundError: -Xmx1024m -Xms1024m -DTOOLS_DIR="/home/IM/work/dist" -Daoi=whole -jar "/home/IM/work/dist/idt_tools/jar"
ERR>Caused by: java.lang.ClassNotFoundException: -Xmx1024m -Xms1024m -DTOOLS_DIR=".home.IM.work.dist" -Daoi=whole -jar ".home.IM.work.dist.idt_tools.jar"
ERR> at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
ERR> at java.security.AccessController.doPrivileged(Native Method)
ERR> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
ERR> at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
ERR> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
ERR> at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
ERR>Could not find the main class: -Xmx1024m -Xms1024m -DTOOLS_DIR="/home/IM/work/dist" -Daoi=whole -jar "/home/IM/work/dist/idt_tools.jar". Program will exit.
Run Code Online (Sandbox Code Playgroud)
为什么认为这是一堂课?你能不能在一个长字符串中指定你的参数?
我需要读取我写的另一个java程序生成的byte [].众所周知,java中的main只能返回一个void.这是否意味着我需要使用返回类型为byte []的静态方法编写程序?如果是的话,我怎么能在我的程序中运行这个方法并在程序中保存它的返回值?这就是我在程序中的含义:
ProcessBuilder pb = new ProcessBuilder("java.exe","viewer.java","pathToViewer.java");
Process process = pb.start();
InputStream is = process.getInputStream();
byte[] bytes = IOUtils.toByteArray(is);
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?
我尝试读取当前的cpu频率.经过一些研究,我发现了以下代码:
public String ReadCPUMhz2() throws IOException
{
String[] args = {"/system/bin/cat", "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"};
ProcessBuilder cmd;
cmd = new ProcessBuilder(args);
Process process = null;
process = cmd.start();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder log=new StringBuilder();
String line;
Log.d("test","aha");
while ((line = bufferedReader.readLine()) != null) {
log.append(line + "\n");
}
Log.d("test",log.toString());
return log.toString();
}
Run Code Online (Sandbox Code Playgroud)
但那并没有做任何事情.Logcat在while循环之前显示"aha",但"log"似乎是空的.我看不出我做错了什么:s?
PS:抱歉英语不好.