树莓派4(Raspberry Pi OS)下Python3打开文本文件权限问题及全屏查看方案
树莓派OS下Python3打开文本文件权限问题解决及全屏查看方案
一、先搞定权限拒绝问题
权限报错大概率是文件/目录的读权限不足,或者文件归属不对,按以下步骤排查:
- 检查文件权限
在终端执行命令查看目标文件的权限详情:
ls -l /home/csiro/Desktop/final_dobot_package/pydobot/logfile/logfile_month_1_year_2023.txt
如果输出中当前用户(csiro)对应的权限位没有r(比如显示-rw-------),给文件添加读权限:
chmod u+r /home/csiro/Desktop/final_dobot_package/pydobot/logfile/logfile_month_1_year_2023.txt
如果连目录都进不去,给目录加执行权限:
chmod u+x /home/csiro/Desktop/final_dobot_package/pydobot/logfile/
- 修正文件归属
如果文件属于root或其他用户,修改归属为当前用户:
sudo chown csiro:csiro /home/csiro/Desktop/final_dobot_package/pydobot/logfile/logfile_month_1_year_2023.txt
二、正确实现全屏查看文本文件
你之前直接用Popen(file_open)的方式不对——系统不知道要用什么程序打开文本文件,只会把它当作可执行文件尝试运行,自然报错。以下是两种可行方案:
方案1:终端环境下用less全屏查看
less是Linux自带的终端文本查看器,默认全屏显示,支持滚动、搜索,按q退出。Python代码:
import os from subprocess import Popen file_name = 'logfile_month_1_year_2023.txt' file_path = '/home/csiro/Desktop/final_dobot_package/pydobot/logfile/' file_full_path = os.path.join(file_path, file_name) # 调用less打开文件,-R参数保留文本颜色(如果有) Popen(['less', '-R', file_full_path])
方案2:图形界面下全屏打开
如果你的树莓派带桌面环境,用leafpad编辑器(需先安装),添加--fullscreen参数实现全屏:
import os from subprocess import Popen file_name = 'logfile_month_1_year_2023.txt' file_path = '/home/csiro/Desktop/final_dobot_package/pydobot/logfile/' file_full_path = os.path.join(file_path, file_name) # 用leafpad全屏打开文件 Popen(['leafpad', '--fullscreen', file_full_path])
没装leafpad的话先在终端安装:
sudo apt update && sudo apt install leafpad
方案3:纯Python实现终端全屏查看
不想依赖外部工具的话,用Python自带的curses库实现全屏滚动查看:
import os import curses file_name = 'logfile_month_1_year_2023.txt' file_path = '/home/csiro/Desktop/final_dobot_package/pydobot/logfile/' file_full_path = os.path.join(file_path, file_name) def fullscreen_view(file_path): # 初始化终端全屏环境 stdscr = curses.initscr() curses.curs_set(0) stdscr.clear() try: with open(file_path, 'r') as f: content = f.readlines() row = 0 max_row, max_col = stdscr.getmaxyx() while True: stdscr.clear() # 显示当前可见区域的内容 for i in range(max_row): if row + i < len(content): line = content[row + i][:max_col-1] stdscr.addstr(i, 0, line) stdscr.refresh() # 按键控制:↑↓滚动,q退出 key = stdscr.getch() if key == ord('q'): break elif key == curses.KEY_UP and row > 0: row -= 1 elif key == curses.KEY_DOWN and row + max_row < len(content): row += 1 finally: # 恢复终端原有设置 curses.endwin() if __name__ == '__main__': fullscreen_view(file_full_path)
运行后按↑/↓滚动内容,按q退出。
内容的提问来源于stack exchange,提问作者Chi
相关产品推荐
相关产品推荐

