Raspan: выполнение скрипта Python из Java / Tomcat, пользователь tomcat8 не отвечает - PullRequest
0 голосов
/ 01 мая 2018

Привет, я пытаюсь запустить 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!

1 Ответ

0 голосов
/ 01 мая 2018

спасибо ... это нужно добавить пользователя tomcat8 в файл sudoers без пароля и выполнить скрипт python с помощью sudo ...

...