0

私は単純にls fromのlinux terminal commandようなものを実行し、それが返す結果、またはそれを受け取りたいものを返し、. 私は検索しましたが、これは見つかりましが、 のものは見つかりませんでした。LuaJJava GuiLuaJ

LuaJからターミナルコマンドを実行する機能はありますか??

4

1 に答える 1

0

これを行うには複数の方法があります。1 つは、自分で Java に実装してから LuaJ にリンクする方法です。

LuaFunction command = new OneArgFunction()
{
    public LuaValue call(LuaValue cmd)
    {
        Process p = Runtime.getRuntime().exec("/bin/sh", "-c", cmd.checkstring());
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        int returnCode = p.waitFor();
        return LuaValue.valueOf(returnCode);
    }
}
globals.set("command", command);

次にLuaで:

local code = command("ls");

コマンドの出力を実際に取得する際の問題は、fixall ソリューションだけでは解決できないことです。プログラムが入力を必要とするかどうかは言うまでもなく、一定の出力を生成する 2 時間実行されるプログラムを呼び出している可能性があることをシステムが認識しているため、これは問題になる可能性があります。特定の関数のみを使用することがわかっている場合は、上記の関数のダーティ バージョンを作成して、ストリームからの出力をキャプチャし、終了コードの代わりにすべてを返すことができます。 t すぐに戻ります。もう 1 つの方法は、プロセスからの入力ストリームと出力ストリームをラップし、そのクラスの強制バージョンを返すクラスを作成し、lua からの入力と出力を管理することです。

Lua には、execute() と呼ばれる OsLib の一部である関数があります。execute が現在の環境に存在しない場合は、Java 呼び出しで次のようにします。

globals.load(new OsLib());

lua コードをロードする前。os.execute() 関数はステータス コードを返し、ストリームを返さないため、そこに出力を取得する方法はありません。これを回避するには、コマンドを変更して、出力を一時ファイルにパイプし、io ライブラリ (現在の環境に存在しない場合は new IoLib()) で開くようにします。

もう 1 つのオプションは、io.openProcess を使用することです。これもコマンドを実行し、出力を読み取るファイルを返します。

資力:

http://luaj.org/luaj/3.0/api/org/luaj/vm2/lib/OsLib.html

http://luaj.org/luaj/3.0/api/org/luaj/vm2/lib/IoLib.html

于 2016-08-23T05:16:49.023 に答える