1

私がする必要があるのは、アプリケーションの対話モードに入り、コマンドの送信を開始することです。アプリケーションはグラフィックスマジックです。バッチ モードでは、mysql の動作と同様の状態になり、コマンドの前にアプリケーションの名前を付けずにコマンドを送信できます。これが私がやったことです:

   public Executor startBatchMode( OutputStream input )  {

            Executor executor = new DefaultExecutor();

            CommandLine cmdLine = new CommandLine( cmdPath );    
            cmdLine.addArgument( "batch" );

            DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();

      //  AutoFlushingPumpStreamHandler: https://gist.github.com/martypitt/4653381       
     //   AutoFlushingPumpStreamHandler streamHandler = new AutoFlushingPumpStreamHandler( System.out );

            PumpStreamHandler streamHandler = new PumpStreamHandler( System.out );
            streamHandler.setProcessInputStream(input  );
            executor.setStreamHandler( streamHandler );

            try {
                executor.execute( cmdLine, resultHandler );
                streamHandler.start();

            } catch ( IOException e ) {
                e.printStackTrace();
            }
            return executor;
        }

        public static void main( String[] args ) throws IOException {
            ExecWrapper exec = new ExecWrapper( "/usr/local/bin/gm" );
            OutputStream stream = new PipedOutputStream(  );
            PrintWriter writer = new PrintWriter(stream);
            Executor executor = exec.startBatchMode( stream );
            for(int i=0;i<5;i++)   {
                writer.write( "convert /Users/latu/Desktop/400.jpg /Users/latu/Desktop/"+i+".png\n" );
                writer.flush();     
            }

             writer.close();

出力の場合、アプリケーションはバッチ モードに入り、終了します。端末から使用すると、バッチ モードに入り、EOF 文字までユーザーからのコマンドを待ちます。startBatchMode() を呼び出す前にライターにコマンドを追加しようとしましたが、違いはありませんでした。また、物事をかなり動かそうとしましたが、結果は常に同じです。

これを機能させる方法について何か提案はありますか?

アップデート

Java ランタイムを使用すると、これは非常に単純であり、次のように機能します。

   private void runExec() throws IOException {
        Process process = Runtime.getRuntime().exec( "/usr/local/bin/gm batch" );

        OutputStream stdin = process.getOutputStream();

        for ( int i = 0; i < 5; i++ ) {
            String line = "convert /Users/latu/Desktop/400.jpg /Users/latu/Desktop/" + i + ".png" + "\n";
            stdin.write( line.getBytes() );
            stdin.flush();
        }
    }

exec には、理想的には再実装する必要のない優れた機能がいくつかあるため、引き続き使用したいと考えています。

4

1 に答える 1