主な質問:groovyのメソッドでは、ファイルを引数として取るコマンドを実行できますか?バックグラウンドモードでコマンドを実行することはできますか?Groovyのスクリプトは外部プロセスを実行できません
ここは私の問題です。私はGroovyのを、例えばls
のような単純なコマンドに使用することができました。ここでは、カッファのようなプロセスをgroovyスクリプトから始めたいとします(最終結果はbash
ファイルをgroovyスクリプトに置き換えることです)。だから私はこれらの行で始まる:
def kafkaHome = "Users/mememe/kafka_2.11-0.9.0.1"
def zkStart = "$kafkaHome/bin/zookeeper-server-start.sh"
def zkPropsFile = "$kafkaHome/config/zookeeper.properties"
、以下のコマンドを実行すると、私のmac端子を形成:
/Users/mememe/kafka_2.11-0.9.0.1/bin/zookeeper-server-start.sh /Users/mememe/kafka_2.11-0.9.0.1/config/zookeeper.properties
は、プロセスがうまく起動します。そして、このステートメントを実行する:
println "$zkStart $zkPropsFile"
上記のコマンドラインをそのまま出力します。しかし、グルーヴィーなスクリプト内からこのコマンドを実行する:
println "$zkStart $zkPropsFile".execute().text
は、単純にハングアップ!そして、このしよう:これは上記と同じ例外を与えるしようと
java.lang.NumberFormatException: For input string: "/Users/mememe/kafka_2.11-0.9.0.1/config/zookeeper.properties"
::私は、それがバックグラウンド・プロセスがさらに進んで、しかし、入力ファイルに文句を開始し、この例外をスローします
println "$zkStart $zkPropsFile &".execute().text
def proc = ["$zkStart", "$zkPropsFile", "&"].execute()
println proc.text
どうしたらいいですか?ありがとうございました。
これはうまくいきました。さて、余分なマイルを乗り越えて、これをバックグラウンドプロセスとして実行して、他のコマンドを後で実行できるようにしてはどうでしょうか? '' $ '$ zkStart $ zkPropsFile&" 'があるように'& 'を追加しましたが、うまくいきませんでした。あるいは、コードが、バックグラウンドで操作が実行される並行したロジックにまとめて、少しスリープ状態にして、別のスレッドで他のプロセスを実行する必要があるでしょうか? – mohsenmadi
2つの行の後に 'sleep SOMETIME'を追加し、' Thread.start {...}。join() '句の中のすべての行をラップすると、次の文が正常に実行されたので望ましい結果が得られます。より良い方法がありますか? – mohsenmadi