【问题标题】:Java execute multiple console commands on loaded programJava 在加载的程序上执行多个控制台命令
【发布时间】:2015-04-28 21:27:37
【问题描述】:

我想从控制台加载一个程序,然后稍后对其执行命令。加载工作正常,但是如何在加载的程序上执行命令而不每次我想使用它时都启动它?

例如: ./randomapp 命令1 命令2

但在 Java 上,每次我想对其执行某些操作时,我都必须使用 ./randomapp command1,因此程序不会保持加载状态。

【问题讨论】:

  • 如果您可以执行作为命令行参数传递的命令,您还可以从标准输入/控制台读取命令并执行它。问题出在哪里?
  • 我想使用运行时加载使用 ./startprogram 的程序。然后我想稍后在某个地方使用另一个运行时从新运行时执行程序命令。但问题是,程序不再从另一个运行时加载,就像我从控制台启动它时那样。

标签: java console command runtime execute


【解决方案1】:

对您的 Java 程序或您想要执行和输入命令的应用程序一无所知,这是在黑暗中拍摄的。此外,省略了所有错误处理。我使用 tee 来运行程序,因为它很方便。

public class Command {
    private static OutputStream os;
    private static OutputStreamWriter osw;
    private static Process process;
    public static void start(){
        try { 
            ProcessBuilder pb = new ProcessBuilder( "/usr/bin/tee", "x.dat" );
            process = pb.start();
            os = process.getOutputStream();
            osw = new OutputStreamWriter( os );
        } catch( Exception e ){
            // error handling
        } catch( Error e ){
            // error handling
        }
    }

    public static void terminate() throws Exception {
        process.waitFor();
    }

    public static void command( String str ) throws Exception {
        String cmd = str + System.lineSeparator();
        osw.write( cmd, 0, cmd.length() );
        osw.flush();
    }

我已使用以下方法对此进行了测试:

Command.start();
Command.command( "line 1" );
Thread.sleep( 2000 );
Command.command( "line 2" );
Thread.sleep( 2000 );
Command.command( "line 3" );
Command.terminate();

这些行可以在 x.dat 上找到。

【讨论】:

  • 如何解析控制台返回的内容?
  • 您可以获得传递应用程序标准输出的process.getInputStream()。您可以在编写另一个命令后开始或继续阅读。但是:你知道预计会有多少行吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多