• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Executing python in js - troublshooting/development

Scheduled Pinned Locked Moved Troubleshooting
18 Posts 2 Posters 1.4k Views 2 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    sdetweil @beejay22
    last edited by sdetweil Aug 24, 2020, 7:26 PM Aug 24, 2020, 7:24 PM

    @beejay22 so, can u run the script from the terminal like before

    python /home/pi/Desktop/realTester.py
    and then /home/pi/Desktop/realTester.py

    both should work, produce the same results
    that $ wasn’t part of the chmod

    Sam

    How to add modules

    learning how to use browser developers window for css changes

    1 Reply Last reply Reply Quote 0
    • B Offline
      beejay22
      last edited by Aug 24, 2020, 10:37 PM

      I didn’t add the $ to the command, I just said that in my post for clarity lol. I typed just this in the command line:
      chmod +x /home/pi/Desktop/realTester.py

      And yes I can run my script in the terminal with “python3 /home/pi/Desktop/realTester.py” but not with “/home/pi/Desktop/realTester.py” because the module I’m using in my script includes bs4 which is available with python3 I believe so I have to say python3

      I also tried ‘touch ~/MagicMirror/css/custom.css’, still showing same error log

      S 1 Reply Last reply Aug 24, 2020, 11:19 PM Reply Quote 0
      • S Offline
        sdetweil @beejay22
        last edited by sdetweil Aug 24, 2020, 11:21 PM Aug 24, 2020, 11:19 PM

        @beejay22 u can run python3 as the shebang. I was just giving example

        your node_helper code was spawning python, not python3. I just copied what u did. u can put python3 in the spawn as well

        custom.css, doesn’t matter, it’s empty so no harm

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        1 Reply Last reply Reply Quote 0
        • B Offline
          beejay22
          last edited by Aug 25, 2020, 2:48 AM

          Tried this (all I changed was “python” to “python3”):

          const spawn = require("child_process").spawn
          var NodeHelper = require("node_helper")
          
          module.exports = NodeHelper.create({
            socketNotificationReceived: function(notification, payload) {
              switch(notification) {
                case "GIVE_ME_DATA":
                  this.job()
                  break
              }
            },
            job: function() {
              var process = spawn("python3", ["/home/pi/Desktop/realTester.py"])
              process.stdout.on("data", (data)=>{
                console.log(data)
                var result = String.fromCharCode.apply(null, new Uint16Array((data)))
                this.sendSocketNotification("HERE_IS_DATA", data)
              })
            }
          })
          

          And also changed pyscript to this (just added python3 to the shebang):

          #!/usr/bin/python3
          from bs4 import BeautifulSoup                                             
          import requests                                                           
          
          url=requests.get("https://www.whitehouse.gov/presidential-actions/")      
          src=url.content                                                           
          soup = BeautifulSoup(src, 'lxml')
          for h2_tag in soup.findAll('h2'):
              a_tag = h2_tag.find('a')
              print(a_tag.string)
          

          Also tested “python” again (not python3) in my node_helper along with the updated shebang as shown above

          If custom.css file doesn’t matter I wonder why it’s giving this error… Have no clue what’s going on now lol

          S 1 Reply Last reply Aug 25, 2020, 3:51 AM Reply Quote 0
          • S Offline
            sdetweil @beejay22
            last edited by sdetweil Aug 25, 2020, 3:53 AM Aug 25, 2020, 3:51 AM

            @beejay22 u need the fix for the data conversion… as well…

            custom.css cause its a file t=hat MM force loads, and while the browser is unhappy (thus the error), the MM runtime doesn’t care WHY there was no data, missing file, empty file, don’t care there were no css updates…

            i don’t do python so I can’t help much…

            but you gotta put in the fixes I gave you for data…

              process.stdout.on("data", (data)=>{
                  console.log(data.toString()) // debugging, log string     
                  //var result = String.fromCharCode.apply(null, new Uint16Array((data)))
                  this.sendSocketNotification("HERE_IS_DATA", data.toString())   // pass the string, module expects string
                })
            

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            1 Reply Last reply Reply Quote 0
            • B Offline
              beejay22
              last edited by Aug 25, 2020, 10:41 PM

              Sorry I copied the wrong node_helper.js file in my last post. This is how it looks like now:

              //node_helper.js
              const spawn = require("child_process").spawn
              var NodeHelper = require("node_helper")
              
              module.exports = NodeHelper.create({
                socketNotificationReceived: function(notification, payload) {
                  switch(notification) {
                    case "GIVE_ME_DATA":
                      console.log("received notification")
                      this.job()
                      break
                  }
                },
                job: function() {
                  var process = spawn("python3", ["/home/pi/Desktop/realTester.py"])
                  process.stdout.on("data", (data)=>{
                    console.log(data.toString())    
                    this.sendSocketNotification("HERE_IS_DATA", data.toString()) 
                  })
                }
              })
              

              I was trying to test if I can at least print something to magic mirror without a pyscript… node_helper looks like this:

              //node_helper.js
              const spawn = require("child_process").spawn
              var NodeHelper = require("node_helper")
              
              module.exports = NodeHelper.create({
                socketNotificationReceived: function(notification, payload) {
                  switch(notification) {
                    case "GIVE_ME_DATA":
                      console.log("received notification")
                      this.job()
                      break
                  }
                },
                job: function() {
                  var process = spawn("python3", ["/home/pi/Desktop/test.py"])
                  process.stdout.on("data", (data)=>{
                    data= "Hello World";
                    console.log(data.toString())   
                    this.sendSocketNotification("HERE_IS_DATA", data.toString())  
                  })
                }
              })
              

              Hello World appears on MagicMirror but the test file that’s provided in the path (the test file just has: print(“this works”) does not so I’m not sure why I need to provide var process spawn if Hello World prints by itself… Anyways, I’m aware that there’s other ways to execute the child process however I’m not familiar with it. Please correct me if I’m wrong but can exec work in this situation as well? (pyscipt just prints out the latest titles when magic mirror restarts). I’m trying anything and everything at this point

              And I added the default and start function to my core module although I don’t think I have to use it. This is how it looks like now:

              /// MMM-Whitehouse.js - Core Module
              
              Module.register("MMM-Whitehouse", {
                defaults: {},
                start: function () {},
                getDom: function() {
                  var e = document.createElement("div")
                  e.id = "DISPLAY"
                  return e
                },
                notificationReceived: function(notification, payload, sender) {
                  switch(notification) {
                    case "DOM_OBJECTS_CREATED":
                      var timer = setInterval(()=>{
                        this.sendSocketNotification("GIVE_ME_DATA")
                      }, 1000)
                      break
                  }
                },
                socketNotificationReceived: function(notification, payload) {
                  switch(notification) {
                    case "HERE_IS_DATA":
                      var e = document.getElementById("DISPLAY")
                      e.innerHTML = payload
                      break
                  }
                },
              })
              
              S 1 Reply Last reply Aug 25, 2020, 11:05 PM Reply Quote 0
              • S Offline
                sdetweil @beejay22
                last edited by sdetweil Aug 25, 2020, 11:22 PM Aug 25, 2020, 11:05 PM

                @beejay22 I don’t understand why u have trouble.

                the 3 files I posted work together as u designed.

                does your spawn(‘/use/bin/python’, [execname]) work to return the data.
                console log to see

                spawn and exec have different methods of returning the data. see the doc

                Google search nodejs process spawn

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                1 Reply Last reply Reply Quote 0
                • B Offline
                  beejay22
                  last edited by Aug 25, 2020, 11:21 PM

                  Did you try it with the pyscript? Or are you talking about it the core module, node_helper and config?

                  And okay

                  S 1 Reply Last reply Aug 25, 2020, 11:24 PM Reply Quote 0
                  • S Offline
                    sdetweil @beejay22
                    last edited by sdetweil Aug 25, 2020, 11:25 PM Aug 25, 2020, 11:24 PM

                    @beejay22 I am only working on inside MagicMirror

                    the spawn on.data() gets called when the pgm launched outputs to stdout. my print hello

                    of course I made sure the python script worked both ways, before showing that

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    1 Reply Last reply Reply Quote 0
                    • B Offline
                      beejay22
                      last edited by Aug 25, 2020, 11:30 PM

                      Okay. And yes it does return the data as output I believe

                      S 1 Reply Last reply Aug 26, 2020, 12:07 AM Reply Quote 0
                      • 1
                      • 2
                      • 2 / 2
                      2 / 2
                      • First post
                        12/18
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy