ev3dev编程基础必知清单:文件权限、Shebang与brickrun运行器全解析

📅 发布时间:2026/8/21 16:18:42
ev3dev编程基础必知清单:文件权限、Shebang与brickrun运行器全解析 ev3dev编程基础必知清单文件权限、Shebang与brickrun运行器全解析【免费下载链接】ev3devev3dev meta - bug tracking, wiki and releases项目地址: https://gitcode.com/gh_mirrors/ev/ev3devev3dev 编程基础中有三个概念几乎决定着你第一个机器人程序能否顺利跑起来文件权限、Shebang和brickrun 运行器。ev3dev 是一套基于 Debian Linux 的操作系统可运行在 LEGO MINDSTORMS EV3、树莓派BrickPi、PiStorms等乐高机器人硬件上。与图形化编程不同ev3dev 编程更接近 Linux 原生开发——而 Linux 的可执行权限、魔法第一行以及专门的程序运行器正是新手最容易踩坑的地方。这份清单将带你逐项扫清障碍让你的脚本一次运行成功。 本文内容整理自官方文档 fundamentals.rst适用于 Bash、Python、Lua、Perl 等所有 ev3dev 支持的语言。文件权限为什么总提示 Permission deniedLinux以及所有类 Unix 系统有一个特殊的权限设置用于标记这个文件可以执行。如果可执行权限没有设置你直接运行文件时会看到报错Permission denied而在 Brickmanev3dev 的图形化文件管理器中可执行文件的名字后面会有一个*标记。如果你的脚本在文件浏览器里没有星号那么无论如何都无法从 Brickman 直接运行它。一键修复chmod x 设置可执行权限通过远程终端SSH登录设备后运行下面这条命令即可chmod x my_script.py这条命令会为文件设置可执行位executable bit让操作系统允许把它当作程序来运行。把my_script.py换成你自己的文件名即可。用 ls -l 验证权限是否生效设置完成后可以用ls -l查看文件的权限状态ls -l my_script.py你会看到类似这样的输出-rwxr-xr-x 1 robot robot 0 Oct 28 19:39 my_script.py注意权限字段中的x出现了三次-rwxr-xr-x。这是因为每个文件都有三组权限分别属于用户user、组group和其他人others。对于 ev3dev 来说最需要关注的是第一组用户robot的权限。传输文件的权限陷阱从 Windows 拷过去的脚本跑不了如果你是通过 U 盘、WinSCP、Filezilla 等方式把脚本从电脑拷贝到 EV3 上可执行权限不会自动带上。这也是新手最常见的文件明明在却无法运行的原因之一。解决方式很简单拷过去之后记得补上一条chmod x。VS Code 扩展自动设置权限的省心方案如果你使用官方推荐的 Visual Studio Code ev3dev 浏览器扩展进行开发详见 ides.rst那么权限会被自动设置好这一节的内容你可以直接跳过。只有当你采用其他方式传输文件时才需要手动处理可执行位。深入理解 Shebang脚本第一行的魔法在 ev3dev 上写脚本通常不建议用python3 my_script.py这种显式调用解释器的方式而是把脚本本身做成一个可独立执行的程序。这就要用到 Shebang。Shebang 是什么一行声明决定解释器Shebang 是脚本文件第一行的特殊语法用来告诉操作系统用哪个解释器来运行这个文件。它长这样#!/usr/bin/env python3当你运行脚本时操作系统会执行/usr/bin/env python3由env自动找到系统中的python3再用它来运行你的脚本。你也可以直接写解释器的完整路径比如#!/bin/bash为什么推荐 /usr/bin/env python3使用/usr/bin/env是 Python 开发的最佳实践它更灵活比如使用virtualenv虚拟环境时解释器路径可能与/usr/bin/python不同而env会去PATH里自动寻找。另外根据 PEP 394 规范纯 Python 3 脚本应写python3纯 Python 2 脚本应写python2只有同时兼容 2.x 和 3.x 的脚本才用不带数字的python。忘记 Shebang 会怎样如果脚本缺少 ShebangLinux 会退而求其次尝试把文件当作shell 脚本来执行。于是你的 Python 代码里会出现大量command not found之类的奇怪报错让人摸不着头脑。记住Python 程序第一行永远是#!/usr/bin/env python3。 冷知识Shebang 这个名字来自#!两个字符——在计算机俚语中#被称作 sharp或 shell prompt!被称作 bang合起来就是 shebang。行尾符号CRLF/LF坑Windows 用户的必修课行尾是文本文件中每行结尾的隐藏字符。Windows 使用CRLF回车换行即\r\n而 Linux 只使用LF换行即\n。大多数解释器不在乎行尾但Windows 的行尾会破坏 Shebang 这一行——Linux 会试图运行python3\r而不是python3最终报出 File not found 错误。一个经典判断方法如果python3 my_file.py能运行但./my_file.py报错十有八九就是行尾问题。使用 Windows 编辑器如 VS Code、Notepad时记得把行尾设置为UnixLF。Linux 和 macOS 用户默认就是 LF一般无需操心。设置可执行位让 Shebang 生效有了 Shebang 还不够最后一步是给文件设置可执行位——也就是前面chmod x讲的内容。两者配合脚本才能以./my_script.py的方式独立运行。brickrun 运行器为什么别直接运行脚本虽然终端里直接输入./my_script.py也能运行程序但在 ev3dev 上强烈不建议这么做。原因很现实如果你的程序崩溃了电机不会自动停下来机器人可能会自毁甚至撞坏东西。brickrun 帮你做了什么正确的做法是使用brickrun来启动程序brickrun ./my_script.pybrickrun是 ev3dev 专用的程序运行器它替你处理了 ev3dev/Linux 中的一些棘手问题️控制台切换自动切换到程序运行所需的活动控制台崩溃清理程序退出或崩溃时自动清理现场例如停止电机⚖️行为一致无论从哪里启动程序运行行为都保持一致。更妙的是Brickman 图形界面和 VS Code 扩展在后台用的都是brickrun。这意味着你在终端用brickrun运行程序与从 Brickman 点按钮运行效果完全一样不用担心中间有什么隐藏差异。标准输入输出brickrun 下的特殊行为所有程序都有标准输入输出流即stdin、stdout和stderr。在brickrun下它们的行为和普通终端有些不同数据流远程终端直接运行通过 brickrun 运行stdin输入读取远程终端键盘输入读取设备本体按键/外接键盘stdout输出打印到远程终端打印到设备屏幕stderr错误打印到远程终端打印到远程终端也就是说用brickrun启动程序后想要给程序输入数据需要按 EV3 设备上的按钮而不是在远程终端里打字而print()的输出会显示在设备屏幕上。从 Brickman 界面启动程序时同样如此。关于错误输出从 Brickman 启动程序时没有远程终端stderr会被保存到与程序同名的.err.log文件中比如my_script.py.err.log读取它就能看到程序报错如果程序没有错误输出这个文件不会生成。使用 VS Code 扩展时stderr则显示在 VS Code 的OUTPUT面板中。 调试小技巧把调试信息打印到stderr可以方便地排查程序问题。ev3dev 脚本运行排查清单从报错到解决把上面所有知识点浓缩成一张速查表遇到问题直接对号入座症状原因解决方案Permission denied缺少可执行权限chmod x my_script.pyBrickman 中文件名无*可执行位未设置补上chmod xcommand not found一串报错脚本缺少 Shebang第一行加#!/usr/bin/env python3File not found仅 Windows 传输CRLF 行尾破坏 Shebang编辑器改为 Unix (LF) 行尾python3 xxx.py能跑、./xxx.py不行大概率是行尾或权限问题检查 LF 行尾 可执行位程序崩溃后电机不停未使用运行器改用brickrun ./my_script.py结语ev3dev 编程的入门门槛并不高但 Linux 的规矩确实会让新手多花一些时间。把文件权限chmod x、Shebang 第一行和brickrun 运行器这三件事一次搞清楚你的第一个机器人程序就能顺利跑起来。如果你想进一步系统学习可以继续阅读官方文档中的 编程基础、开发环境说明以及 ev3dev 项目总览。按设备选择 快速入门指南 也是不错的下一个学习目标。祝你在 ev3dev 编程的世界里玩得开心【免费下载链接】ev3devev3dev meta - bug tracking, wiki and releases项目地址: https://gitcode.com/gh_mirrors/ev/ev3dev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考