简体   繁体   English

启动停止服务并通过python脚本关闭

[英]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. 首先,我在这里完全是菜鸟,请问如果这是一个愚蠢的问题或违反了某些网络礼节规则。这是我在UNIX /编程世界中最想尝试的尝试,目的是使网络摄像头机器人成为树莓派。 I would like to control it through a web page / python script. 我想通过网页/ python脚本来控制它。 I am trying to follow this tutorial http://blog.ramon.no/2013/06/build-simple-internet-controlled-webcam.html 我正在尝试按照本教程http://blog.ramon.no/2013/06/build-simple-internet-受控-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. 我设置了带有运动的树莓而不是mjpeg-streamer来在网页上流式传输。现在,我试图停止启动流并从网页上关闭树莓。 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 如果我按下开始/停止流,如果我按下关闭,则什么也没有发生,我收到500错误

I granted user right to www 我授予了www用户权利

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

made script exec 使脚本执行

chmod +x rambot.py

this is apache error log 这是Apache错误日志

[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: 您可以使用OS库中包含的流程管理功能来实现:

http://docs.python.org/2/library/os.html#process-managment 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. 建议使用子进程模块执行命令,而不是使用os.system()函数。 Reference : https://docs.python.org/2/library/os.html#os.system 参考: 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() : 如果要获取命令的输出,则可以使用subprocess.check_output()代替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. 注意:我仅使用python3,希望这里使用python2不会有任何区别。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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