繁体   English   中英

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

[英]Start stop service and shutdown through python script

首先,我在这里完全是菜鸟,请问如果这是一个愚蠢的问题或违反了某些网络礼节规则。这是我在UNIX /编程世界中最想尝试的尝试,目的是使网络摄像头机器人成为树莓派。 我想通过网页/ python脚本来控制它。 我正在尝试按照本教程http://blog.ramon.no/2013/06/build-simple-internet-受控-webcam.html

我设置了带有运动的树莓而不是mjpeg-streamer来在网页上流式传输。现在,我试图停止启动流并从网页上关闭树莓。 这是我在论坛上阅读后得出的结论,但是无效。 我设法连续三次关闭了覆盆子,但是我改变了一些东西,现在我做不了了

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" )

如果我按下开始/停止流,如果我按下关闭,则什么也没有发生,我收到500错误

我授予了www用户权利

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

使脚本执行

chmod +x rambot.py

这是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/

我看到缩进方式已经过去了。 如果不是错字,请缩进如下:

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" )

如果这不是问题,抱歉,我不确定。

您可以使用OS库中包含的流程管理功能来实现:

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

建议使用子进程模块执行命令,而不是使用os.system()函数。 参考: https : //docs.python.org/2/library/os.html#os.system

子流程模块提供了更强大的功能来生成新流程并检索其结果。 使用该模块优于使用此功能

此外,在脚本开始时加载所需的模块是更标准的。

你可以这样:

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'])

如果要获取命令的输出,则可以使用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)

打印:

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

注意:我仅使用python3,希望这里使用python2不会有任何区别。

暂无
暂无

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

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