重新启动后弹出权限错误

时间:2020-02-06 10:59:04

标签: python-3.x linux permissions pwm

在尝试运行我的Python3脚本时,有时似乎无缘无故地抛出了权限异常,例如脚本工作正常,但在RPi重新启动后,会发生此错误:

root@navio:/home/pi/Raspberry# python3 rpi_testing.py

PermissionError: [Errno 1] Operation not permitted 
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/usr/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "Raspberry/rpi_testing.py", line 58, in receiver
rearL_pwm.initialize()
File "/home/pi/Raspberry/navio/pwm.py", line 34, in initialize
pwm_export.write(str(self.channel))
PermissionError: [Errno 1] Operation not permitted

错误也随机消失。例如,在我对代码做了一些小的更改(从字面上添加一些打印内容)之后,或者如果我先运行另一个脚本。该文件应具有所需的所有权限:

pi@navio:~/Raspberry $ ls -l rpi_testing.py
-rwxr-xr-x 1 pi pi 7702 Feb  5 14:41 rpi_testing.py

我确实以root身份运行脚本。我没有足够的经验去知道我还应该研究什么,但是脚本大部分时间都在运行,这一事实使我相信代码本身应该没问题,但这是代码中有问题的部分:

 #!/usr/bin/python
import serial
import time
import struct
import sys
sys.path.append('/home/pi/Raspberry/navio')

import navio.pwm
import navio.util
import navio.leds
import navio.ublox

from multiprocessing import Process, Value, Array, Manager
from multiprocessing.managers import BaseManager, SyncManager
import signal

def receiver(s):
try:
    navio.util.check_apm()
    LED = navio.leds.Led()
    LED.setColor('Cyan')
    # PWM INIT
    frontR_pwm = navio.pwm.PWM(0)
    frontR_pwm.initialize()
    frontR_pwm.set_period(90)
    frontR_pwm.enable()
    frontR_pwm.set_duty_cycle(1.42)
    time.sleep(0.2)
    frontL_pwm = navio.pwm.PWM(1)
    frontL_pwm.initialize()
    frontL_pwm.set_period(90)
    frontL_pwm.enable()
    frontL_pwm.set_duty_cycle(1.42)
    time.sleep(0.2)
    rearR_pwm = navio.pwm.PWM(2)
    rearR_pwm.initialize()
    rearR_pwm.set_period(90)
    rearR_pwm.set_duty_cycle(1.42)
    rearR_pwm.enable()
    time.sleep(0.2)
    rearL_pwm = navio.pwm.PWM(3)
    rearL_pwm.initialize()
    rearL_pwm.set_period(90)
    rearL_pwm.set_duty_cycle(1.42)
    rearL_pwm.enable()
    time.sleep(0.2)
    # END PWM INIT
    while 1:
       ...do something

def mgr_sig_handler(signal, frame):
   return None
# initilizer for SyncManager
def mgr_init():
   signal.signal(signal.SIGINT, mgr_sig_handler)
   print('Initialized mananger.')

if __name__ == "__main__":
    serialPort = serial.Serial("/dev/ttyUSB0", baudrate=250000)
    processes = []
    manager = SyncManager()
    manager.start(mgr_init)

    #receiver process
    rec_p = Process(target=receiver,args=(serialPort, ))
    rec_p.start()
    processes.append(rec_p)

    try:
        for process in processes:
            process.join()
    except KeyboardInterrupt:
        print("Closing serial and ending all processes!")
        serialPort.close()

感谢您提供有关如何解决此问题的建议。 附言以前在RPi堆栈交换中曾问过这个问题,但建议我将其迁移到这里。

0 个答案:

没有答案