我正在尝试从扇模式进程调用扇命令。这是它从扇汤姆运行的错误,它从命令行正确运行。你觉得问题会是什么?
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)发布于 2016-12-12 19:32:14
我认为问题在于,没有名为fan的Windows文件,只有fan.bat!
只有Windows命令提示符才能插入fan并查找可执行扩展、.com、.bat、.cmd、.exe等.
注意,使用BedSheet代理的经验告诉我,新的fan.bat在单独的进程中启动fan.bat,批处理文件立即结束;因此,即使扇fan.bat程序成功运行,您也不会收到来自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上。
https://stackoverflow.com/questions/41106896
复制相似问题