udev规则启动的Python代码无法复制文件,并且以静默方式失败

2024-07-01 06:57:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Raspberry Pi上开发一个简单的应用程序,通过从USB读取配置文件来自动配置WiFi。为了测试这个概念,我创建了一个简单的udev规则,在usb上调用下面的脚本“Add”。此代码基于几年前的堆栈溢出问题。你知道吗

#!/bin/sh
logger -s "Running autoconfigure."

# Run Python code
sudo -H -u pi sh -c "nohup /usr/bin/python /home/pi/datalogger/autocopy.py &"

ret=$?
if [ $ret -ne 0 ]; then
    logger -s "Returned error: $ret"
fi
exit

Python代码是:

# Raspberry Pi autocopy scripts to copy a File from USB to /home/pi on USB insert
# Requires udev rule:
# KERNEL=="sd*1", ACTION=="add", RUN=="/home/pi/datalogger/autocopy.sh"
# or similar

import shutil
import syslog
import sys

f= open("/home/pi/datalogger/temp.txt","w+")
for i in range(10):
     f.write("This is line %d\r\n" % (i+1))
f.close()

source="/home/pi/datalogger/temp.txt"
destination="/home/pi/datalogger/test.txt"

syslog.syslog(sys.version)

try:
   shutil.copyfile(source, destination)
except shutil.Error as e:
   syslog.syslog(e)
   exit(1)
except shutil.IOError as e:
   syslog.syslog(e)
   exit(1)
except:
    syslog.syslog(sys.exc_info())
    exit(1)

syslog.syslog("Completed normally")
exit(0)

所有这些代码所做的就是创建和复制一个文件,就像插入USB密钥所触发的那样(剩下的可以稍后再做)。问题是文件不会创建或复制,脚本也不会出错(尽管它们确实在运行)。Python代码返回一个“1”代码,表示可能有错误。如果我以pi用户的身份手动运行,脚本会像sudo用户那样完美地工作。作为测试的一部分,我已经放宽了所有权限。我真的不知道该去哪里找?日志中没有指出代码有问题。任何建议/指导都将不胜感激。你知道吗


Tags: 代码importtxt脚本homeshsysexit

热门问题