Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use python subprocess.check_output with root / sudo

I'm writing a Python script that will run on a Raspberry that will read the temperature from a sensor and log to Thingspeak. I have this working with a bash script but wan't to do it with Python since it will be easier to manipulate and check the read values. The sensor reading is done with a library called loldht. I was trying to do it like this:

from subprocess import STDOUT, check_output
output = check_output("/home/pi/bin/lol_dht22/loldht", timeout=10)

The problem is that I have to run the library with sudo to be able to access the pins. I will run the script as a cron. Is it possible to run this with sudo?

Or could I create a bash script that executes 'sudo loldht' and then run the bash script from python?

like image 521
Mathias Rönnlund Avatar asked Mar 13 '23 17:03

Mathias Rönnlund


2 Answers

I will run the script as a cron. Is it possible to run this with sudo?

You can put python script.py in the cron of a user with sufficient privileges (e.g. root or a user with permissions to files and devices in question)

I don't know which OS you're using, but if Raspbian is close to Debian, there is no need for sudo or root, just use a user with sufficient permissions.

It seems I can also do this check_output check_output(["sudo", "/home/pi/bin/lol_dht22/loldht", "7"], timeout=10)

Sure but the unix user that's going to invoke that Python script will need the sudo privilege (Otherwise can't call the sudo from subprocess). In which case you might as well do as above, run the cron from a user with the required permissions.

like image 168
bakkal Avatar answered Mar 25 '23 04:03

bakkal


You can run sudo commands with cron. Just use sudo crontab -e to set the cron and it should work fine.

like image 40
tylermoseley Avatar answered Mar 25 '23 06:03

tylermoseley