我想找出Mindstorms Robot Inventor的mindstorms模块的源代码在哪里。
在每个文件的开头都有一个起始头
from Mindstorms import ...
Etc..这就是我想要找到的。
我尝试了多种python方法来归档文件路径,但它们都返回./projects/8472.py
谢谢,henos
发布于 2021-01-02 11:53:51
你可能一直在使用__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.listdir和print的组合,因为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()再说一次,控制台中没有复制-粘贴功能是很粗糙的,所以即使到了“在屏幕上显示文件内容”这一部分,也没有那么大的帮助。
不过,需要注意的一件很酷的事情是,如果你加载了一个scratch程序,你可以在普通的.py中阅读代码。它和您期望的一样容易理解,因为它使用了非常低级的调用和抽象,而不是您通常编写的hub.light_matrix.show_image("CLOCK6")。
https://stackoverflow.com/questions/65534559
复制相似问题