2017-06-30 5 views
1

私はこれに関するかなりの研究を行いましたが、残念ながら私が現在持っている問題に適した答えを見つけることができませんでした。Javaプロセスからの対話的なPython GUI(Matplotlib)の実行

私の質問は、「Javaからpythonスクリプトを実行するにはどうすればよいですか」という質問には、同じ回答を含む少なくとも10個のスレッドがすべて存在します。私はそれを行う方法を理解しています。次のように私の問題は次のとおりです。

私はこのようなものに見えるの.pyファイル(gui.py)があります。

#!/usr/bin/env python 
import matplotlib.pyplot as plt 
import copy 
import math 
import numpy as np 

class GUI(object): 
    ... 
    ... 
    ... 
if __name__ == '__main__': 
    GUI.run() 

このGUIは、ユーザーが何かを描画した上でインタラクティブmatplotlibのプロットであるが。詳細は重要ではありません - 結論はmatplotlibウィンドウが開いている限りスクリプトが実行されることです。

今、私は側面にJavaアプリケーションを構築しています。クリックすると、スクリプトを呼び出すJava Processオブジェクトが作成されます。私はPIPEをJavaランタイムから呼び出せないという他の投稿を読んでいるので、このpythonスクリプトを囲む.shファイルを作成しました。

shell.sh: - 私は、端末の通常のようにすべて正しく機能から、それを実行したときに

view.getLaunchGuiButton().addActionListener((e) -> { 

      try { 
       String[] prcArgs = new String[] { "/mypath/to/shell.sh" }; 
       Process proc = Runtime.getRuntime().exec(prcArgs); 

      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     }); 

シェルスクリプトが正しい:

#!/bin/sh 
python /mypath/to/the/gui.py 

Javaは、シェルスクリプトを呼び出します。

私はJavaが実際にシェルスクリプトを実行していることを知り、pythonスクリプトを呼び出しています。エラーはありません。私はBufferedReaderを設定しませんでした。なぜなら、何も読むことができないからです。私は、GUIを開くだけです。私は問題は、一度シェルが実行されると、Runtimeによって開かれた "端末"というように、すぐに閉じられるので、それはPythonスクリプトとGUIを殺すということです。

私の質問は、Runtimeを単に実行して、すぐにPythonスクリプト(端末を閉じる)をただちに終了させることです。

物事は私がすでにやった:

  • chmod +x ../../shell.sh
  • は、シェルスクリプトでnohup /call/python/here &を使用してみました。うまくいきませんでした。
  • Runtimeの代わりにJavaのProcessBuilderを使用して試しました。変わりはない。

あらかじめありがとうございます。私はxtermの-ED幹部のJavaボタンのリスナーから

答えて

0
  1. if [[ -z "$XTERM_ONCE" ]] 
    then 
        export XTERM_ONCE=$(date) 
        cd /home/qswadey/path/to/py/script/ 
        python3 pyscript_with_GUI.py 
    fi 
    

    ザ・PythonのGUI:~/.bashrc

    try { 
         Process p = Runtime.getRuntime().exec("xterm"); 
         Thread.sleep(1500); 
    
        } catch (IOException e1) { 
         e1.printStackTrace(); 
        } 
    
  2. を私はGUIと私のPythonスクリプトを起動する私のコマンドを追加しました表示され続ける...

すべてのxtermがこのスレッドから供給されるため、xtermの起動時にコマンドを実行しているのアイデア:How to run a command on the startup of an xterm?

Thread.sleepはわずかコマンドの出力を見るためにいくつかの時間のためのxtermを保持するための、しかしxtermがで実行中のままにされますインタラクティブモード

関連する問題