2016-12-12 9 views
2

ファントムプロセスからファンコマンドを呼び出そうとしています。これはFantomから実行されるエラーです。コマンドラインから正しく実行されます。その問題はどういうものだと思いますか?ファントムプロセスからファンコマンドが失敗する

class Main { 
    Void main() { 
     buf := Buf() 

     Process() { 
      command = ["fan <pod>::<type>.<method>"] 
      out = buf.out 
     }.run.join 

     outStr := buf.flip.readAllStr 
    } 
} 

これは私が取得していますエラーは次のとおりです。

sys::IOErr: java.io.IOException: Cannot run program "fan <pod>::<type>.<method>": 
CreateProcess error=2, The system cannot find the file specified 
    java.lang.ProcessBuilder.start (Unknown) 
    fan.sys.Process.run (Process.java:141) 
    PDFCommandLine::Main.main (Main.fan:10) 
    java.lang.reflect.Method.invoke (Unknown) 
    fan.sys.Method.invoke (Method.java:559) 
    fan.sys.Method$MethodFunc.callOn (Method.java:230) 
    fan.sys.Method.callOn (Method.java:139) 
    fanx.tools.Fan.callMain (Fan.java:185) 
    fanx.tools.Fan.executeType (Fan.java:147) 
    fanx.tools.Fan.execute (Fan.java:41) 
    fanx.tools.Fan.run (Fan.java:308) 
    fanx.tools.Fan.main (Fan.java:346) 

答えて

2

私は問題は、唯一のfan.batfanと呼ばれる窓のないファイルが存在しないことだと思います!

それはなど、.exe.cmd.bat.comfanを補間し、実行可能な拡張子を探しますのみ、Windowsのコマンドプロンプトで... BedSheetプロキシと

注の経験は、新たなfan.bat Javaを起動することを私に伝えます別のプロセスでは、バッチファイルはすぐに終了します。 Fantomプログラムが正常に実行されたにもかかわらず、実際にはProcessクラスからの出力は得られません。

代わりに、Javaプロセスを起動するコマンドを自分で作成する必要があります。ような何か:

C:\> java -cp %FAN_HOME%\lib\java\sys.jar fanx.tools.Fan <pod>::<type>.<method> 

はここでクロスplaformの方法で、まさにそれを行う少し抜粋です:

static Process fanProcess(Str[] cmd) { 
    homeDir := Env.cur.homeDir.normalize 
    classpath := (homeDir + `lib/java/sys.jar`).osPath 
    args  := ["java", "-cp", classpath, "-Dfan.home=${homeDir.osPath}", "fanx.tools.Fan"].addAll(cmd) 
    return Process(args) 
} 

そして、あなたは次のように使用することができます:

buf := Buf() 
fanProcess(["<pod>::<type>.<method>", "arg1", "arg2"]) { 
    out = buf.out 
}.run.join 
outStr := buf.flip.readAllStr 

注上記必要ですjavaはあなたのPATHにあります。

関連する問題