运行自动脚本时出现“No such file”错误
我正在做一个项目,想让它在树莓派启动时自动打开。我可以在启动时打开其他几个脚本,但我想在启动时打开的这个脚本却打不开。
注意:这个代码在我通过IDLE运行时是可以工作的,但在我通过LX终端测试时却不行。当我在自动运行脚本下测试这个脚本时,它给我报了错。
另一个注意:所有的图片文件都和脚本放在同一个文件夹里。
这是我的代码:
from Tkinter import *
from PIL import Image, ImageTk
from random import randint
import RPi.GPIO as GPIO
root = Tk()
root.overrideredirect(True)
root.geometry("1920x1080+0+0")
image=Image.open('bikebackground.png')
background_image = ImageTk.PhotoImage(image)
background_label = Label(root, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)
speed = 4
class Biker(Label):
def __init__(self, master, filename):
im = Image.open(filename)
seq = []
try:
while 1:
seq.append(im.copy())
im.seek(len(seq)) # skip to next frame
except EOFError:
pass # we're done
try:
self.delay = im.info['duration']/speed
except KeyError:
self.delay = 100
first = seq[0].convert('RGBA')
self.frames = [ImageTk.PhotoImage(first)]
Label.__init__(self, master, image=self.frames[0])
temp = seq[0]
for image in seq[1:]:
temp.paste(image)
frame = temp.convert('RGBA')
self.frames.append(ImageTk.PhotoImage(frame))
self.idx = 0
self.cancel = self.after(self.delay, self.play)
def play(self):
self.config(image=self.frames[self.idx])
self.idx += 1
if self.idx == len(self.frames):
self.idx = 0
self.cancel = self.after(self.delay, self.play)
anim = Biker(root, 'racer2.gif')
anim.place(relx=0, rely=0, relwidth=1, relheight=1)
w = Label(root, text= 'You are generating\n%d.%d Watts\nof power' %(randint(10,15),
randint(0,99)), font=("Helvetica", 50))
w.place(relx=.6, rely=.5, relwidth=.4, relheight=.25)
wh = Label(root, text= 'You have generated\n%d.%d Kilojoules\nof energy' %(randint(0,2),
randint(0,99)), font=("Helvetica", 50))
wh.place(relx=.6, rely=.75, relwidth=.4, relheight=.25)
root.mainloop()
在LX终端测试代码时,这里是报错信息:
pi@raspberrypi ~/bin $ /home/pi/bin/script_auto_run
Doing autorun script...
pi@raspberrypi ~/bin $ Traceback (most recent call last):
File "/home/pi/New/Display.py", line 10, in <module>
image=Image.open('bikebackground.png')
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 2093, in open
fp = builtins.open(fp, "rb")
IOError: [Errno 2] No such file or directory: 'bikebackground.png'
2 个回答
0
我没有通过绝对路径来运行脚本,而是直接在LXDE环境中运行,这样我可以轻松地在启动时自动运行。具体做法是打开LX终端,然后输入:
sudo nano /etc/xdg/lxsession/LXDE/autostart
接着在自动启动的文件里输入以下命令:@sudo python /home/pi/New/Display.py
最后重启了树莓派(RPi),结果就成功了。
1
看起来这个脚本不是在同一个文件夹里运行的,所以它找不到工作目录中的图片。你应该在图片路径前面加上文件夹的绝对路径:
import os.path
# Get the folder on the current file (/home/pi/New for your case)
SCRIPT_DIR = os.path.basename(__file__)
# and then use os.path.join to concatenate paths
image = Image.open(os.path.join(SCRIPT_DIR, 'bikebackground.png'))
..或者在运行脚本之前,先切换到脚本所在的文件夹。