【问题标题】:Raspan: Execute Python Script from Java/Tomcat, tomcat8 user not accRaspan:从 Java/Tomcat 执行 Python 脚本,tomcat8 用户不接受
【发布时间】: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


【解决方案1】:

谢谢...这是需要将tomcat8用户添加到没有密码的sudoers文件并使用sudo执行python脚本...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2016-03-18
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多