在rc.local中运行的Python无法持续写入文件

时间:2019-03-27 18:21:55

标签: python raspberry-pi root writing

我试图让我的树莓派在启动时运行代码,这将允许我使用游戏手柄控制电机驱动器。我拥有的代码在正常运行时有效,但从rc.local运行时不起作用

我创建了一个版本(请参见下文),其内容应为“未连接游戏板。请打开它!”每次它搜索游戏手柄时,一旦找到它,就应该在每次按下该按钮时在同一文件中写“ Y”或“ B”。

它始终写为“未连接游戏板。请打开它!”到文件,但随后不写入按下的按钮。同样,当我不是从rc.local运行它时,它也可以正常工作。

在线查找解决方案时,我发现python在后台运行时无法正确写入文件。我试过在rc.local中将其作为“ python -u”运行,在文件顶部添加“#!/ usr / bin / python -u”,并同时使用f.flush()和sys.stdout对其进行刷新.flush()以不同的组合。

这是我的rc.local文件

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
#sudo python /home/pi/sample.py &
python -u /home/pi/Desktop/RPi_Bluetooth_RoboClaw/On_Boot_Motor.py &
exit 0

这是我正在运行的代码的相关部分。首先,确保游戏手柄已连接,然后应开始将输出写入文件。

#!/usr/bin/python -u

import time
from roboclaw import Roboclaw
from evdev import InputDevice, categorize, ecodes
import fnmatch
import os

f = open("/home/pi/Desktop/Output.txt","w")

gamepadConnect = False
while(not gamepadConnect):
    try:
        gamepad = InputDevice('/dev/input/event0')
        gamepadConnect = True
    except:
        f.write("No Gamepad Connected. Please turn it on! \n")
        time.sleep(0.5)

f.close()

#button code variables as found for 8bitdo gamepad
bBtn = 305
yBtn = 308

while(True):
    f = open("/home/pi/Desktop/Output.txt","a")
    try:
        for event in gamepad.read_loop():
            if event.type == ecodes.EV_KEY:
                if event.value == 1:
                                        #if the Y button is pressed
                    if event.code == yBtn:
                        #Turn Left
                        f.write("Y")
                                        #if the B button is pressed
                    elif event.code == bBtn:
                        #Inch
                        f.write("B")
    except KeyboardInterrupt:          
        break

    f.flush()
        sys.stdout.flush()
    f.close()

从本质上讲,我试图弄清楚为什么它只写了“没有连接游戏板。请打开它!”而不是按下按钮,并且理想情况下,我希望找到一种在将字节发送给电机驱动程序时可以使用的解决方案,例如有关rc.local如何运行文件的内容。

0 个答案:

没有答案