这是RaspBerry Pi与Raspian“JessIE lite”.
如果我使用“sudo python myscript.py”手动运行脚本,它可以正常工作.
sudo systemctl status myscript.service reports:
* myscript.service - Python ScriptLoaded: loaded /etc/systemd/system/myscript.service; enabled) Active: inactive (dead) since Mon 2016-08-29 04:33:19 UTC; 1s agoProcess: 3275> ExecStart=/usr/bin/python /home/pi/myscript.py (code=killed,signal=HUP)Main PID: 3275 (code=killed,signal=HUP)
如果我使用sudo systemctl启动myscript.service手动启动服务,则会发生同样的事情.
我已经将我的脚本删除到pygame.init()调用.这是它退出的地方.
如果我尝试手动初始化模块,那么“cdrom”,“joystick”,“threads”和“Font”会正常初始化,但是调用display.init()会导致程序退出.没有例外.
我在网上找到的唯一资源是this guy.看起来他遇到了我所看到的完全相同的事情.
我试过strace,如果我等了足够长的时间(2分钟),它会起作用!
显然我不能一直用strace跑.我认为它减慢了初始化的执行速度,以某种方式允许它工作.
编辑:
所以这个问题似乎是systemd发送一个SIGHUP.如果在Python中未处理此 *** 作,则默认 *** 作是退出.快速解决方法是抓住SIGHUP:
import signaldef handler(signum,frame): passtry: signal.signal(signal.SIGHUP,handler)except AttributeError: # windows compatibility pass
这么多燃烧的问题.为什么systemd会这样做?为什么strace解决这个问题?为什么有些Python脚本会获得SIGHUP而其他Python脚本却没有?
解决方法 对我来说,解决方案只是初始化我需要的特定模块.在我的情况下,而不是pygame.init()我初始化了pygame.mixer.init(),现在systemd可以启动服务.
总结以上是内存溢出为你收集整理的python-2.7 – pygame.init()在使用systemd运行时失败全部内容,希望文章能够帮你解决python-2.7 – pygame.init()在使用systemd运行时失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)