Привет, я пытаюсь запустить python из файла java / war. Tomcat может получить доступ к этому файлу, потому что он его генерирует. Как пользователь с правами pi или root, я могу без проблем выполнить созданный файл сценария. Но процесс tomcat8 неправильно запускает файл сценария.
По какой-то причине я не могу перейти на пользователя tomcat8 с помощью su 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";
}
Я не получаю никаких ошибок. Пи должен запустить реле, которое не щелкает. Возвращаемое значение равно нулю. Реле щелкает как пи пользователь. Python Exe является тем же (что Python.)
"/ home / pi / Pimoroni / automahathat / examples / automahathat / init .py", lin e 354, в настройке
_ads1015 = ads1015 (smbus.SMBus (1))
IOError: [Errno 13] В доступе отказано
GPIO.setup(self.pin, GPIO.OUT, initial=0)
RuntimeError: Нет доступа к / dev / mem. Попробуйте запустить от имени root!