我正在用Python制作一个控制台录音机。 但是,当它尝试将 60.png 保存在 FRAMES 目录中时,它失败并出现错误。 这是我的代码:
import os
from PIL import Image, ImageDraw
c = 1
def save():
global c
m = Image.new("RGB",(400,200),"#004c66")
draw = ImageDraw.Draw(m)
draw.text((5,5),text=output,fill=(255,255,255))
with open(f"FRAMES/{c}.png","a+b") as fp:
m.save(fp,"PNG")
c+=1
output = 'Welcome to movieconsole!\nVersion: 0.1\n'
save()
with open('commands.txt') as fp:
for i in fp.read().splitlines():
if len(os.getcwd()) < 30:
output += os.getcwd() + '$ '
else:
output += os.getcwd()[0:30] + '...$ '
save()
for l in i:
output += l
save()
output += '\n'
a = os.popen(i)
for p in a.read().splitlines():
output+=p+"\n"
save()
if len(output.splitlines()) > 12:
output = '\n'.join(output.splitlines()[1::])
if i[0:2] == 'cd':
os.chdir(' '.join(i.split()[1::]))
if len(output.splitlines()) > 12:
output = '\n'.join(output.splitlines()[1::])
print(output)
错误是:
FileNotFoundError: [Errno 2] No such file or directory: 'FRAMES/60.png'
我认为问题在于您在程序运行时更改目录(响应
cd
作为输入)。然后,当您尝试在名为 FRAMES
的子目录中写入时,它就不再存在了。
我建议您使用
Pathlib
(它是标准库的一部分,不需要安装)并在程序启动时创建到输出目录的absolute路径,然后在构造输出文件名时使用它:
from pathlib import Path
# Near start of code... create output dir and save absolute path
out = Path('FRAMES').absolute()
out.mkdir(exist_ok = True)
然后,稍后,当您想要写入第 60 帧时:
i = 60
filepath = out / f'{i}.png'
image.save(str(filepath))
请注意,绝对路径是以斜杠开头的,并且不受目录更改的影响。相反,相对路径是相对于当前工作目录表示的,因此它取决于您当前在文件系统中的位置。