【发布时间】:2018-05-01 08:34:36
【问题描述】:
您好,我尝试从 java/war 文件执行 python。 Tomcat 可以访问此文件,因为它会生成它。作为 pi 或 root 用户,我可以毫无问题地执行生成的脚本文件。但是tomcat8进程没有正确运行脚本文件。
由于某种原因,我无法通过su tomcat8换成tomcat8用户试试tomcat8用户是否可以,我不明白。
我用这个代码
public static void executePythonScript(String pathScriptFile) {
try{
File f = new File(pathScriptFile);
System.out.println(f.getAbsolutePath() +" exists:"+ f.exists());
ProcessBuilder pb = new ProcessBuilder("python", pathScriptFile);
Process p = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String ret = in.readLine();
System.out.println("value is : "+ret);
}catch(Exception e){System.out.println(e);}
}
@RequestMapping(value="/api/togglegaragedoor")
public String toggleGarageDoor() {
try {
String prg = "#!/usr/bin/env python\n\nimport automationhat\\n\nautomationhat.relay.one.on()";
BufferedWriter out = new BufferedWriter(new FileWriter("/home/pi/Pimoroni/automationhat/examples/relay_on.py"));
out.write(prg);
out.close();
String prg2 = "#!/usr/bin/env python\n\nimport automationhat\\n\nautomationhat.relay.one.off()";;
BufferedWriter out2 = new BufferedWriter(new FileWriter("/home/pi/Pimoroni/automationhat/examples/relay_off.py"));
out2.write(prg2);
out2.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Api.executeCommand("which python");
Api.executePythonScript("/home/pi/Pimoroni/automationhat/examples/relay_on.py");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Api.executePythonScript("/home/pi/Pimoroni/automationhat/examples/relay_off.py");
return "toggled";
}
我没有收到任何错误。 pi 应该触发一个没有点击的继电器。返回的值为空。继电器以 pi 用户身份单击。 python exe是一样的(哪个python。)
“/home/pi/Pimoroni/automationhat/examples/automationhat/init.py”,第 354 行,在设置中 _ads1015 = ads1015(smbus.SMBus(1)) IOError: [Errno 13] 权限被拒绝
GPIO.setup(self.pin, GPIO.OUT, initial=0)
RuntimeError: 无法访问 /dev/mem。尝试以 root 身份运行!
【问题讨论】:
-
您遇到什么错误或异常?更新问题,以便我们可以查明问题可能是什么
-
可以使用sudo su tomcat8切换用户,在tomcat8用户上下文下执行脚本
-
sudo su tomcat8 不起作用,我输入密码,我仍然是 pi 用户。我没有收到任何错误。 pi 应该触发一个没有点击的继电器。返回值为空。
-
尝试使用 pb.redirectErrorStream(true);在 pb.start 之前将 stderr 重定向到 stdout 以查看是否打印了任何错误。
-
谢谢你,现在我从 lib:"/home/pi/Pimoroni/automationhat/examples/automationhat/init.py",第 354 行,在 setup _ads1015 = ads1015(smbus. SMBus(1)) IOError: [Errno 13] Permission denied
标签: java python raspberry-pi raspbian tomcat8