我正在开发一个源代码判断软件。我在Linux平台上开发了UBuntu 12.04 LTS。替代windows的unix shell命令?
现在我想在Windows上部署它。 我的软件,我正在创建命令按照UNIX shell,将它们保存在一个文件,然后通过文件执行命令。 下面是代码的一部分:
package codejudge.compiler.languages;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import codejudge.compiler.TimedShell;
public class C extends Language {
String file, contents, dir;
int timeout;
public C(String file, int timeout, String contents, String dir) {
this.file = file;
this.timeout = timeout;
this.contents = contents;
this.dir = dir;
}
public void compile() {
try {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dir + "/" + file)));
out.write(contents);
out.close();
// create the compiler script
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dir + "/compile.sh")));
out.write("cd \"" + dir +"\"\n");
out.write("gcc -lm " + file + " 2> err.txt");
out.close();
Runtime r = Runtime.getRuntime();
Process p = r.exec(dir + "/compile.sh");
p.waitFor();
p = r.exec(dir + "/compile.sh"); // execute the compiler script
TimedShell shell = new TimedShell(this, p, timeout);
shell.start();
p.waitFor();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void execute() {
try {
// create the execution script
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dir + "/run.sh")));
out.write("cd \"" + dir +"\"\n");
out.write("./a.out <in.txt> out.txt");
out.close();
Runtime r = Runtime.getRuntime();
Process p = r.exec(dir + "/run.sh");
p.waitFor();
p = r.exec(dir + "/run.sh"); // execute the script
TimedShell shell = new TimedShell(this, p, 3000);
shell.start();
p.waitFor();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
当我在窗户我收到以下错误回报(IHAVE安装在Windows上的MinGW)上运行相同的代码:
Codejudge compilation server running ...
Compiling garima.c...
java.io.IOException: Cannot run program "C:\xampp\htdocs\project\codejudge-compiler\stage\1/compile.sh": CreateProcess error=193, %1 is not a valid Win32 application
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at codejudge.compiler.languages.C.compile(C.java:41)
at codejudge.compiler.RequestThread.run(RequestThread.java:65)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 6 more
java.io.FileNotFoundException: C:\xampp\htdocs\project\codejudge-compiler\stage\1\err.txt (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at codejudge.compiler.RequestThread.compileErrors(RequestThread.java:90)
at codejudge.compiler.RequestThread.run(RequestThread.java:66)
java.io.IOException: Cannot run program "C:\xampp\htdocs\project\codejudge-compiler\stage\1/run.sh": CreateProcess error=193, %1 is not a valid Win32 application
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at codejudge.compiler.languages.C.execute(C.java:65)
at codejudge.compiler.RequestThread.run(RequestThread.java:72)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 6 more
java.io.FileNotFoundException: C:\xampp\htdocs\project\codejudge-compiler\stage\1\out.txt (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at codejudge.compiler.RequestThread.execMsg(RequestThread.java:106)
at codejudge.compiler.RequestThread.run(RequestThread.java:77)
我很少有关win32 shell命令的知识。需要对代码进行哪些更改即ie。哪些命令应该更改,哪些不能在Windows上运行?他们的窗户替代物是什么?
正在使用cygwin一个选项吗? – piokuc 2013-05-09 17:52:58
真的没用过吗?即使我使用它,我将如何将请求重定向到cygwin? – shiven 2013-05-09 17:54:04
你需要在cygwin shell中运行整个事情 – piokuc 2013-05-09 17:54:38