来自Fantom进程的Fan命令失败

时间:2016-12-12 18:09:31

标签: cmd fantom

我试图从Fantom流程调用粉丝命令。这是它从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)

1 个答案:

答案 0 :(得分:2)

我认为问题是没有名为fan的Windows文件,只有fan.bat

只有Windows命令提示符才会插入fan并查找可执行扩展名.com.bat.cmd.exe等。

注意使用BedSheet代理的经验告诉我,新的fan.bat在单独的进程中启动Java,批处理文件立即完成;因此即使Fantom程序成功运行,您也不会从Process类接收任何输出。

相反,您需要编写一个自己启动Java进程的命令。类似的东西:

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

这是一个以跨平台的方式做到这一点的小片段:

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