Mindstorms 模块文件存储在哪里

时间:2021-01-01 23:15:51

标签: python mindstorms

我想知道 Mindstorms Robot Inventor 的 mindstorms 模块的源代码在哪里。

在每个文件的开头都有一个

的起始头
from Mindstorms import ...
Etc..

这就是我想要的。

我尝试了多种 python 方法来归档文件路径,但它们都返回 ./projects/8472.py

谢谢, 希诺斯

1 个答案:

答案 0 :(得分:0)

您可能一直在使用 __file__ 和类似的东西,对吗?是的,这将为您提供当前正在运行的文件,但由于您无法编辑实际 Mindstorms 代码的代码,因此它没有帮助。相反,您希望检查目录本身,就像您的常规 Python 代码在其他地方访问数据文件一样。

大多数内部系统都是 .mpy 文件(请参阅 http://docs.micropython.org/en/v1.12/reference/mpyfiles.html),因此直接从设备读取代码不是最佳选择。此外,这意味着许多“标准库”包丢失或不完整;你不能import pathlib,但你可以import os,但你不能使用os.walk()。这些限制使任何类型的目录遍历都更加令人沮丧,但并非不可能。

例如,文件 runtime/extensions.music.mpy 如下所示(注意:由于应用程序不允许,因此未复制粘贴):

M☐☐☐ ☐☐☐
 ☐6runtime/extensions/music.py ☐☐"AbstractExtensions*☐☐$abstract_extension☐☐☐☐YT2 ☐☐MusicExtension☐☐4☐☐☐Qc ☐|
☐☐ ☐ ☐☐ ☐☐☐☐ ☐2 ☐☐play_drum2☐☐☐play_noteQc ☐d:
☐☐ *☐☐_call_sync#☐,☐+/-☐☐drumb6☐YQc☐  ☐☐drum_nos☐musicExtension.playDrum☐☐E☐
☐      *☐     #☐,☐+/-☐☐instrumentb*☐☐noteb*☐☐durationb6☐YQc☐  ☐☐☐☐s☐musicExtension.playNote

当然,您可以有点看到发生了什么,但这并没有那么有用。

您需要在此处使用 os.listdirprint 的组合,因为 MicroPython 实现不授予对 os.walk 的访问权限。帮助您入门的示例代码:

import os
import sys

print(os.uname())  # note: doesn't reflect actual OS version, see https://stackoverflow.com/questions/64449448/how-to-import-from-custom-python-modules-on-new-lego-mindstorms-robot-inventor#comment115866177_64508469

print(os.listdir("."))  # ['util', 'projects', 'runtime', ...]
print(os.listdir("runtime/extenstions"))  # ['__init__.mpy', 'abstract_extension.mpy', ...]

with open("runtime/extensions/music/mpy", "r") as f:
    for line in f:
        print(line)

sys.exit()

同样,控制台缺少复制粘贴功能很粗糙,因此即使您确实进入了“在屏幕上显示文件的内容”部分,也没有那么有用。

需要注意的一件很酷的事情是,如果您加载了一个临时程序,您可以阅读常规 .py 中的代码。它与您预期的一样易于理解,因为它使用了非常 低级调用和抽象,而不是您通常编写的 hub.light_matrix.show_image("CLOCK6")