简体   繁体   中英

Start stop service and shutdown through python script

First of all I am totally noob here , please excuse me If this is a stupid question or broke some netiquette rule.This is my fiorst attempt in unix/programming world I am trying to make a webcam robot raspberry based. I would like to control it through a web page / python script. I am trying to follow this tutorial http://blog.ramon.no/2013/06/build-simple-internet-controlled-webcam.html

I setup raspberry with motion instead of mjpeg-streamer for streaming on the web page.Now I am trying to stop start stream and shutdown raspberry from the web page. This is what I came after reading around the forum but it doesn't work . I managed to shut down raspberry three time in a row but the I changed something and now I can't do it anymore

elif action == "shutdown":
print "Attempting to shut down"
call(["sudo", "shutdown", "-h", "now"])
elif action == "startstream":
    import os
os.system("sudo service motion start")
elif action == "stopstream":
    import os
os.system("sudo service motion stop" )

If I push start / stop stream nothing happen if I push shut down I receive a 500 error

I granted user right to www

sudo nano /etc/sudoers
www-data ALL=(ALL) NOPASSWD: ALL

made script exec

chmod +x rambot.py

this is apache error log

[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] SyntaxError: invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5]   ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] SyntaxError: invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:38 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:39 2015] [error] [client 192.168.0.5] File does not exist: /var/www/css, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]    ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] SyntaxError: invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5]   ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] SyntaxError: invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:37:41 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:18 2015] [error] [client 192.168.0.5] File does not exist: /var/www/css, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]     elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]        ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] SyntaxError: invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5]  , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] SyntaxError, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] : , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:19 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] elif action == "stopstream":, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5]        ^, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] SyntaxError: invalid syntax, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:38:59 2015] [error] [client 192.168.0.5] Premature end of script headers: rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:39:01 2015] [error] [client 192.168.0.5]   File ", referer: http://192.168.0.10:8083/
[Tue Feb 24 09:39:01 2015] [error] [client 192.168.0.5] /usr/lib/cgi-bin/rambot.py, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:39:01 2015] [error] [client 192.168.0.5] ", line , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:39:01 2015] [error] [client 192.168.0.5] 87, referer: http://192.168.0.10:8083/
[Tue Feb 24 09:39:01 2015] [error] [client 192.168.0.5] , referer: http://192.168.0.10:8083/
[Tue Feb 24 09:39:01 2015] [error] [client 192.168.0.5]     , referer: http://192.168.0.10:8083/

I see that the indentation is way off. If that was not a typo, please indent as below:

elif action == "shutdown":
    print "Attempting to shut down"
    call(["sudo", "shutdown", "-h", "now"])
elif action == "startstream":
    import os
    os.system("sudo service motion start")
elif action == "stopstream":
    import os
    os.system("sudo service motion stop" )

In case this was not the issue, sorry I am not sure.

You can make it by using process managment functions included in OS library:

http://docs.python.org/2/library/os.html#process-managment

It's recommended to use the subprocess module to execute commands, instead of the os.system() function. Reference : https://docs.python.org/2/library/os.html#os.system

The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function

Furthermore, it's more standard to load the module(s) you need at the begining of your script.

You could do it this way :

import subprocess
[...]
elif action == "shutdown":
    print "Attempting to shut down"
    return_code = subprocess.call(['sudo', 'shutdown', '-h', 'now'])
elif action == "startstream":
    return_code = subprocess.call(['sudo', 'service', 'motion', 'start'])
elif action == "stopstream":
    return_code = subprocess.call(['sudo', 'service', 'motion', 'stop'])

if you want to get the output of your commands you can use subprocess.check_output() instead of subprocess.call() :

cmd_output = subprocess.check_output(['sudo', 'service', 'apache2', 'status']) 
print(cmd_output)
cmd_output = cmd_output.decode('utf-8').strip('\n\r')
print(cmd_output)

this prints :

b'Apache2 is running (pid 2024).\n'
Apache2 is running (pid 2024).

Note: I use python3 only, I hope there is no differences using python2 here.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM