标签: processbuilder

未调用Thread类中的Run方法

我是一个非常新的线程世界的人,一直试图解决这个问题一个星期了.

Thread类中的run方法由于某种原因没有被调用,我不知道为什么(但是很想知道)

        ProcessBuilder processBuilder = new ProcessBuilder();

        processBuilder.command("/bin/sh", "-c", "echo \"w30000001z,none,16488,,181075\nw30000001z,none,16488,,181082\n\" | /home/beehive/bin/exec/tableSize");
        Process process = processBuilder.start();
        process.waitFor(); 

        InputStream stdin = process.getInputStream();
        OutputStream stdout = process.getOutputStream();
        InputStream stderr = process.getErrorStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(stdin));
        BufferedReader error = new BufferedReader(new InputStreamReader(stderr));
        StreamGobbler errorStream = new StreamGobbler(process.getErrorStream(), "ERROR");
        StreamGobbler outputStream = new StreamGobbler(process.getInputStream(), "OUTPUT");

        errorStream.start();
        outputStream.start();
        errorStream.join();
        outputStream.join();
Run Code Online (Sandbox Code Playgroud)

tableSize是一个python可执行文件,它通过stdin获取输入,处理它并输出几行文本.我需要收集此输出并对其进行进一步处理.

有一个单独的线程来处理inputStream和errorStream上的输出.该线程类如下所示.

/* StreamGobbler.java */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;

class StreamGobbler extends Thread
{ …
Run Code Online (Sandbox Code Playgroud)

java multithreading iostream processbuilder

0
推荐指数
1
解决办法
1287
查看次数

如何在运行.exe文件时修复问题

ThMapInfratab1-2.exeC:\Users\Infratab Bangalore\Desktop\Rod目录下有一个文件.我按照以下方式在命令提示符下执行.它工作正常.

 C:\Users\Infratab Bangalore\Desktop\Rod>ThMapInfratab1-2.exe TMapInput.txt
Run Code Online (Sandbox Code Playgroud)

我想用Java技术做同样的程序.使用StackOverFlow伙伴,我试过两种方式.

情况1:

getRuntime().

   import java.util.*;
   import java.io.*;
   public class ExeProcess
{
public static void main(String args[]) throws IOException
{
    Runtime rt = Runtime.getRuntime();
    File filePath=new File("C:/Users/Infratab Bangalore/Desktop/Rod");
    String[] argument1  = {"TMapInput.txt"};
    Process proc = rt.exec("ThMapInfratab1-2.exe", argument1, filePath);
}
}
Run Code Online (Sandbox Code Playgroud)

案例2:

运用 ProcessBuilder

 import java.io.File;
 import java.io.IOException;
 public class ProcessBuilderSample {

 public static void main(String args[]) throws IOException 
 {
  String executable = "ThMapInfratab1-2.exe";
  String argument1  = …
Run Code Online (Sandbox Code Playgroud)

java processbuilder

0
推荐指数
1
解决办法
4027
查看次数

在ProcessBuilder.start()中返回java.lang.IllegalArgumentException

ProcessBuilder pb = new ProcessBuilder(commandInformation);
Process process = pb.start();
Run Code Online (Sandbox Code Playgroud)

上面的代码返回错误:

java.lang.IllegalArgumentException
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:69)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
    at com.ConvertsImages.SystemCommandExecutor.executeCommand(SystemCommandExecutor.java:51)
    at com.ConvertsImages.ImageConversion.runConvertCommand(ImageConversion.java:115)
    at com.ConvertsImages.ImageConversion.runConvert(ImageConversion.java:80)
    at com.ConvertsImages.ImageConversion.main(ImageConversion.java:26)
Run Code Online (Sandbox Code Playgroud)

List commandInformation只有一个条目如下:

["D:\Program Files\ImageMagick-6.8.6-Q16\convert.exe"  "D:\ConvertFiles\ReImport_2507_1.jpg"  -resize 40x40 "D:\ConvertFiles\proxy-40\ReImport_2507_1.jpg.jpg" ]
Run Code Online (Sandbox Code Playgroud)

请建议.

java processbuilder

0
推荐指数
1
解决办法
810
查看次数

使用ProcessBuilder查找Java版本

我正在尝试使用Java来查找计算机上安装的Java版本.我有:

List<String> commands = new ArrayList<String>();
commands.add("java.exe");
commands.add("-version");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.directory(new File("C:\\Program Files\\Java\\jdk1.6.0_45\\bin"));
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

但是,运行此命令时,由于stdInput为空,因此永远不会执行while循环.如果我取出commands.add("-version")它,它将获得在命令行上运行"java.exe"命令时输出的输入,因此似乎添加-version争论导致问题,这也表明目录和java.exe命令是正确的.任何帮助,将不胜感激.

java processbuilder

0
推荐指数
1
解决办法
346
查看次数

process.waitFor(timeout, timeUnit) 在指定时间后不退出进程

我正在尝试使用流程构建器在我的 Java 应用程序中执行可视化基本脚本代码。由于用户提供的脚本可能无法及时完成执行,我想提供一种方法来限制此执行时间。在下面的代码中,你可以看到我的逻辑,但它并没有真正做它应该做的。我怎样才能使这个等待工作以限制执行时间?

private void run(String scriptFilePath) throws ScriptPluginException {
BufferedReader input = null;
BufferedReader error = null;

try {

    ProcessBuilder p = new ProcessBuilder("cscript.exe", "//U", "\"" + scriptFilePath + "\"");

    String path = "";

    if (scriptFilePath.indexOf("/") != -1) {
        path = scriptFilePath.substring(0, scriptFilePath.lastIndexOf("/"));
    }

    path += "/" + "tempvbsoutput.txt";
    p.redirectOutput(new File(path));
    Process pp = p.start();

    try {
        pp.waitFor(executionTimeout, TimeUnit.MINUTES);     
    } catch (InterruptedException e) {
        SystemLog.writeError(jobId, ScriptConsts.COMPONENT_ID, "VBScriptExecutor", "run", 80401104,
                "VB Script executes fail.");
    } 

    if (!pp.isAlive()) {
        pp.getOutputStream().close();
    } …
Run Code Online (Sandbox Code Playgroud)

java multithreading processbuilder java-threads

-1
推荐指数
1
解决办法
218
查看次数