使用Java运行Python脚本时出错

时间:2013-10-01 16:59:38

标签: java python

我基本上尝试使用Java程序运行Python脚本。

这是我的Java代码片段:

String cmd = "python /home/k/Desktop/cc.py";        
InputStream is = Runtime.getRuntime().exec(cmd).getInputStream(); 
InputStreamReader isr = new InputStreamReader(is);
BufferedReader buff = new BufferedReader (isr);
String line;
while((line = buff.readLine()) != null)
System.out.println(line);

此代码在我运行时打印出我想要的输出。但后来我修改了我的cc.py文件以通过添加额外的行来获取sys.argv参数:print sys.argv [1]

现在我将Java String cmd更改为:

String[] cmd = new String[] {"python /home/k/Desktop/cc.py", "3"};

我收到错误:

Exception in thread "main" java.io.IOException: Cannot run program "python /home/k/Desktop/cc.py": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:485)
at test.main(test.java:36)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 3 more

为什么这不适用于数组字符串,对我来说呢?做了一些谷歌搜索,这适用于其他人。

1 个答案:

答案 0 :(得分:4)

尝试更改

String[] cmd = new String[] {"python /home/k/Desktop/cc.py", "3"};

String[] cmd = new String[] {"python", "/home/k/Desktop/cc.py", "3"};

您使用的第一个表单(exec(String command))在内部对给定字符串进行标记,如果使用exec(String[] cmdarray)表单,则需要将程序作为数组的第一个元素执行,参数为另一方面,因为在这种情况下没有应用标记化。