Tag: 进程

尝试关闭ProcessBuilder OutputStream时,Java挂起

我有以下Java代码来启动ProcessBuilder,打开一个OutputStream,让进程将一个字符串写入一个OutputStream,然后关闭OutputStream。 当我尝试关闭OutputStream时,整个事情无限期地挂起。 这只发生在Windows上,从不在Mac或Linux上发生。 一些相关的问题似乎与我遇到的问题很接近,但我无法弄清楚如何应用我的问题的答案,因为我是Java的相对新手。 这是代码。 你可以看到我已经放入了很多println语句来试图找出问题所在。 System.out.println(“GenMic trying to get the input file now”); System.out.flush(); OutputStream out = child.getOutputStream(); try { System.out.println(“GenMic getting ready to write the input file to out”); System.out.flush(); out.write(intext.getBytes()); // intext is a string previously created System.out.println(“GenMic finished writing to out”); System.out.flush(); out.close(); System.out.println(“GenMic closed OutputStream”); System.out.flush(); } catch (IOException iox) […]

尝试使用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,我会将文件定向到标准输出。 我在这做错了什么? 这有足够的信息吗?

如何捕获从批处理中提取的EXE返回的数据?

我有一个需要从java程序调用的批处理文件。 批处理文件反过来调用EXE。 EXE程序将返回我想要处理的数据。 如果EXE将数据打印到控制台,则能够如下捕获它。 但是当EXE在完成后返回数据时,我无法捕获它。 ProcessBuilder pb = new ProcessBuilder(“foo.bat”); Process p = pb.start(); int exitValue = p.waitFor(); BufferedReader reader; // System.out.println(“Exit Value” + exitValue); if (exitValue == 0) { reader = new BufferedReader(new InputStreamReader(p .getInputStream())); } else { reader = new BufferedReader(new InputStreamReader(p .getErrorStream())); } StringBuffer sb = new StringBuffer(); String temp = reader.readLine(); […]

从Java调用Python

我想从Java调用python脚本。 我的python版本是2.5,Java是6。 我目前的代码: try{ Process p= Runtime.getRuntime().exec(“path/dirs/file.py”); p.waitFor(); } catch (InterruptedException ex){ System.out.println(ex.getMessage());} } 我收到的错误是: Java.IO.IOException:无法运行程序文件名:CreateProcess error = 193,%1不是有效的Win32应用程序

用Java运行Python脚本

我正在尝试在执行我的java代码期间运行python脚本,因为它将取决于从python脚本接收的输出。 到目前为止,我已经尝试过使用jythonc,遗憾的是没有成功,现在我试图使用java Runtime和java Process来执行python脚本。 现在我在尝试调用python脚本时遇到了问题。 我觉得它甚至没有调用脚本,因为它需要不到几秒钟才能进入下一页…. 问题可能是我如何调用python脚本? 我试图通过Web应用程序运行它… 这是我的一些代码: String run = “cmd /c python duplicatetestingoriginal.py” ; boolean isCreated = fwr.writeFile(BugFile, GD, 500, true, 5, “LET”); if(isCreated){ try{ r = Runtime.getRuntime(); p = r.exec(run); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); String line = “”; while ((line = stdInput.readLine()) != […]

当我的Java应用程序退出/崩溃时,如何摆脱Java子进程?

我用Java启动子进程如下: final String[] cmd = {“”}; Process process = Runtime.getRuntime().exec(cmd); 它现在在后台运行。 一切都好又好。 如果我的程序现在崩溃(它仍然在开发:-)),子进程似乎仍然存在。 如何在父Java进程终止时自动结束? 如果有帮助,我使用的是Mac OS X 10.5

在Java中,将命令发送到另一个命令行程序

我在Windows XP上使用Java,并希望能够将命令发送到另一个程序,如telnet。 我不想简单地执行另一个程序。 我想执行它,然后在它运行时发送一系列命令。 这是我想要做的代码,但它不起作用:(如果取消注释并将命令更改为“cmd”,它将按预期工作。请帮助。)这是一个简化的示例。 在生产中会发送更多的命令,所以请不要建议调用“telnet localhost”。 try { Runtime rt = Runtime.getRuntime(); String command = “telnet”; //command = “cmd”; Process pr = rt.exec(command); BufferedReader processOutput = new BufferedReader(new InputStreamReader(pr.getInputStream())); BufferedWriter processInput = new BufferedWriter(new OutputStreamWriter(pr.getOutputStream())); String commandToSend = “open localhost\n”; //commandToSend = “dir\n” + “exit\n”; processInput.write(commandToSend); processInput.flush(); int lineCounter = 0; while(true) { String […]

可以将java程序“键入”到另一个像记事本这样的Windows程序中

无论如何从JAVA进程输入notepad.exe进程?

Java:获取给定pid的进程

假设我已知当前正在运行的进程,如何将其转换为Java中的Process对象? 该进程已经在运行,所以我不想生成另一个进程,我只想将它封装到我可以在java代码中使用的Process对象中。 有点像: int pid = getPid(); Process proc = magicGetProcess(pid); 谢谢

从Java程序执行ADB命令

我正在使用的程序使用ADB(Android Debug Bridge)将文件发送到我的手机: for (String s : files) String cmd = “adb -s 0123456789ABCDEF push ” + s + ” /mnt/sdcard/” + s; try { InputStream is = Runtime.getRuntime().exec(cmd).getInputStream(); while (is.read() != -1) {} } catch (IOException e) { e.printStackTrace(); } 我希望程序等到ADB完成传输,但ADB作为守护进程运行,因此永远不会完成。 但该程序仍在继续,不知何故文件不会发送到我的手机(日志中没有例外)。 当我从控制台运行命令时,它没有问题。 我究竟做错了什么? 如何通过ADB正确发送文件? 注意: is.read() == -1将不起作用,因为ADB守护程序将所有输出写入系统标准输出。 我已经尝试将其转发到文本文件中。 它保持空白,输出仍然写入终端 编辑 :读取ADB流程的ErrorStream返回了每个adb push […]