2016-10-16 11 views
1

おはようございます!既に実行中のシェルでerlangシェルコマンドを実行コンソール

私はErlangのシェルおよびスクリプトのみを経由して通信し、外部関数(zenityを使う)間の通信を設定しようとしている。(それが唯一のコマンドラインを実行することができます)

私のプログラムでは、Erlangのシェルがあります私が必要とするノードは既に稼働しており、生成されています。 (したがって、他のシェルを開いて機能を実行することはできません。escriptは新しいシェルを開きます。私のメインシェルから関数を実行する必要があります)

これは私がマニュアルで行います。 。

$ erl -name [email protected] 
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false] 
Eshell V7.3 (abort with ^G) 
([email protected])1> c(client). 
{ok,client} 
([email protected])2> client:init(). 
true 
([email protected])3> 

client:init()はスレッドを生成します。私はいくつかの機能を介してそれらと通信します。ここから

は私が

client:<function>(<Args>). 

と私の異なる機能を実行します。しかし明らかに

erl -name [email protected] 
c(client). 
client:init() 
client:<function>(<Args>). 

whithスクリプトが、それは動作しません。

私は

$ erl -name [email protected] -s client init 

でこれを少し短くすることができますが、呼び出す関数は、唯一のシェルコマンドを介して通信zenityを使うの出力に依存するため、私はまだ、作成されたシェル上で機能を実行することはできません行

スクリプトを介してerlangコマンドを実行するソリューションはありますか?

+1

[escript](http://erlang.org/doc/man/escript.html)。 –

+0

「Zenityの出力に依存する」と言うとき、Zenityは、標準出力にメッセージを出力し、実際に使用できる有用な値を返しますか? – RichardC

+0

私がよく理解すれば、Zenityはグラフィックウィンドウをポップしたり、情報を表示したり、エントリを求めたりします。そのエントリを読み込んでシェルコマンドを実行することができます。たとえば、年齢> 18、Zenityが '$ <コマンドライン1>'を実行し、 '$ <コマンドライン2> 'を実行すると、ボックスを開き、年齢を聞いてください。 そして、既存のerlangシェル上で関数を実行するための行 – Pantoofle

答えて

0

結果を取得するだけでなく、zenityからコマンドを実行する理由を教えてください。 (それとも、echoを実行することができます。)あなたが探している

1> Port = open_port({spawn_executable, os:find_executable("zenity")}, [in, {line, 65536}, eof, {args, ["--calendar", "--title=Holiday Planner"]}]). 
#Port<0.490> 
2> flush(). 
Shell got {#Port<0.490>,{data,{eol,"10/20/2016"}}} 
Shell got {#Port<0.490>,eof} 
ok 
関連する問題