Tag: runtime.exec

尝试使用Runtime.getRuntime()执行Java jar.exec()

在我正在进行的项目中,我需要在类路径中执行我在资源文件夹中的脚本。 我只是测试最终的脚本function,因为我在Windows上,我需要一种方法将文件输出到STDIN,所以我创建了一个简单的cat.jar程序来克隆unixs cat命令。 所以当我执行“java -jar cat.jar someFile.txt”时,它会将文件输出到stdout。 我确信有不同的方式来做我做的事情。 无论如何,我想从我的主java程序中运行该JAR。 我在做 Runtime.getRuntime().exec(“java -jar C:/cat.jar C:/test.txt”); 我已经尝试将正斜杠切换为反斜杠并转义它 – 不起作用。 什么都没有被送到标准。 如果,如果我自己运行cat jar,我会将文件定向到标准输出。 我在这做错了什么? 这有足够的信息吗?

java Runtime.exec运行shell脚本 – 无法打开文件

我正在使用Runtime.getRuntime()。exec()从java代码运行shell脚本。 String[] cmd = {“sh”, “build.sh”, “/Path/to my/sh file”}; try{ Process proc = Runtime.getRuntime().exec( cmd ); } catch(Exception e){ System.out.println(“Exception is:”+e); } 它在控制台中给出了以下输出: sh: Can’t open build.sh 我在这里采取了一些错误的做法吗? 无法弄清楚为什么他会发生。 编辑 根据这里的评论,我修改了String[] cmd = {“sh”, “build.sh”, “/Path/to my/sh file”}; to String[] cmd = {“sh”, “/Path/to my/sh file/build.sh”, “/Path/to my/sh file”}; 。 现在问题是这个脚本需要从特定路径执行。 当我从命令提示符执行此脚本时,我首先将目录更改为该路径并执行它。 我该如何修改此代码?

如何将stdin重定向到java Runtime.exec?

我想使用Java的Runtime.exec方法执行一些sql脚本。 我打算调用mysql.exe / mysql.sh并将脚本文件重定向到此进程。 从命令提示符我可以运行该命令 <mysqInstallDir\/bin\mysql.exe -u -p < scripts\create_tables.sql 我可以使用Runtime.exec调用mysql.exe但是如何将数据从sql文件重定向到mysql.exe? 我阅读了http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4中的文章,并使用StreamGobbler机制来获取错误和输出流。 没问题。 问题在于使用BufferedReader读取文件“scripts \ create_tables.sql”并将内容传递给prcess的输出流。 我期待Process将数据传递给mysql.exe。 但我看到只有第一行从这个sql文件中读取。 OutputStream outputstream = proc.getOutputStream(); OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream); BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter); while ( (line = br.readLine()) != null) { bufferedwriter.write(line); bufferedwriter.flush(); System.out.println(line); } bufferedwriter.flush(); bufferedwriter.close(); proc.waitFor() 当我这样做时,我看到只执行create_tables.sql中的第一行。 进程的退出代码为0,并且没有其他错误或输出。

ProcessBuilder与Runtime.exec()

哪一个更好? 更好的意思是哪一个具有更好的安全性等(不易使用)。

在生产中进行线程转储

我正在分析获取线程转储的方法之间的差异。 以下是我正在研究的几个人 定义一个jmx bean,它在单击声明的bean操作时通过Runtime.exec()触发jstack。 守护程序线程在预定义的时间间隔后重复执行“ManagementFactory.getThreadMXBean()。dumpAllThreads(true,true)”。 比较两者之间的线程转储输出,我在方法2中看到了以下缺点 使用方法2记录的线程转储无法由TDA等开源线程转储分析器解析 输出不包括本机线程ID,它可用于分析高CPU问题(对吗?) 还有吗? 我很感激获得建议/意见 在生产代码中通过Runtime.exec()执行jstack是否有任何缺点? 各种操作系统上的兼容性问题 – windows,linux? 采取线程转储的任何其他方法? 谢谢。 编辑 – 1和2的组合方法似乎是要走的路。 我们可以在后台运行专用线程,并以线程转储分析器可以理解的格式在日志文件中打印线程转储。 如果需要任何额外的信息(比如说可能是本机线程id)只能由jstack输出记录,我们会根据需要手动执行。

从java代码运行shell脚本并传递参数

我正在从Java程序执行shell脚本。 我已经使用Runtime类实现了它。 以下是我实施的代码 final StringBuilder sb = new StringBuilder(“test.sh”); sb.append(“/path to/my/text file”); final Process p = Runtime.getRuntime().exec(sb.toString()); 这里sb是字符串缓冲区对象,我在其中附加我的参数并在exec方法中使用它。 但问题是我传递的参数“/ path to / my / text file”被认为是4个参数 /path to /my/text file 但是如果在shell中运行test.sh“/ path to / my / text file”,它将作为单个参数。 如何使用Java代码实现相同的function,我需要将此路径与空格作为单个参数进行考虑。 任何请你真的很感激。

如何使用exec在Java中设置环境变量?

可能重复: 如何从Java设置环境变量? 我正在尝试设置一个环境变量,并将其读回以validation它是否已实际设置。 我有以下内容: import java.io.IOException; public class EnvironmentVariable { public static void main(String[] args) throws IOException { Runtime.getRuntime().exec(“cmd.exe set FOO=false”); String s = System.getenv(“FOO”); System.out.println(s); } } 但是,似乎FOO始终为空,这意味着它可能未正确设置。 我的exec命令是否正确? javadocs声明它可以将一个字符串参数作为命令。 有任何想法吗?

使用Runtime.exec()生成的进程的高效执行和输出流重定向

我有一个脚本,它执行多次程序,为STDERR和STDOUT产生大约350行输出。 现在,我需要在Java中执行脚本,从而将输出流打印到其原始目标。 所以,基本上,我从Java类中执行脚本,维护用户的原始行为。 我这样做的方式受到了诸如从java Runtime.exec读取流的建议的启发,并且在function上,工作正常。 Process p = Runtime.getRuntime().exec(cmdarray); new Thread(new ProcessInputStreamHandler(p.getInputStream(), System.out)).start(); new Thread(new ProcessInputStreamHandler(p.getErrorStream(), System.err)).start(); return p.waitFor(); 而ProcessInputStreamHandler类: class ProcessInputStreamHandler implements Runnable { private BufferedReader in_reader; private PrintStream out_stream; public ProcessInputStreamHandler(final InputStream in_stream, final PrintStream out_stream) { this.in_reader = new BufferedReader(new InputStreamReader(in_stream)); this.out_stream = out_stream; } @Override public void run() { String line; […]

Runtime.getRuntime()。exec(cmd)挂起

我正在执行一个命令,它返回一个文件的修订号; ‘文件名’。 但是如果执行命令时出现问题,则应用程序会挂起。 我该怎么做才能避免这种情况? 请在下面找到我的代码。 String cmd= “cmd /C si viewhistory –fields=revision –project=”+fileName; Process p = Runtime.getRuntime().exec(cmd) ; BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line = in.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); }

Runtime.exec()。waitFor()不会等到进程完成

我有这个代码: File file = new File(path + “\\RunFromCode.bat”); file.createNewFile(); PrintWriter writer = new PrintWriter(file, “UTF-8”); for (int i = 0; i <= MAX; i++) { writer.println("@cd " + i); writer.println(NATIVE SYSTEM COMMANDS); // more things } writer.close(); Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat"); p.waitFor(); file.delete(); 发生的事情是文件在实际执行之前被删除。 这是因为.bat文件只包含本机系统调用吗? 如何在执行.bat文件后进行删除? (我不知道.bat文件的输出是什么,因为它会动态更改)。