微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在新的Lego Mindstorms Robot Inventor上从自定义Python模块导入

如何解决如何在新的Lego Mindstorms Robot Inventor上从自定义Python模块导入

我一直在使用新的LEGO®mindstorms®Robot Inventor。

在创建新的“项目”时,该项目似乎包含一个文件。但是,在每个示例代码文件的开头,都可以看到导入了mindstorm模块,如下所示:

interface JQuery<TElement = HTMLElement> {
    setFoo<T extends SomeLibOption<T>>(foo: T): this;
    setBar<T extends SomeLibOption<T>>(bar: T): this;
}

declare const $: JQuery;

有人知道如何创建自己的模块并将其导入给定项目吗?有可能吗?

解决方法

编辑:在此上花了更多时间,并弄清楚了!我在下面保留原始答案。这是一个简短的可复制解决方案。已测试使用(取自os.uname

sysname='LEGO Technic Large Hub'
nodename='LEGO Learning System Hub'
release='1.11.0'
version='v1.11-1139-gf7407e5a0 on 2020-06-19'
machine='LEGO Technic Large Hub with STM32F413xx'
  1. 使用以下内容创建一个新的python项目:

    import os
    import sys
    
    def example() -> None:
        print("imported")
    
    # EOF
    
    # upload the module to the Hub
    print("beginning upload from {}...".format(__name__))
    os.chdir("projects")
    open("__init__.py","w").close()
    filename = "{}.py".format(__name__.split("/")[-1])
    new_filename = "mystorms.py"
    try:
        os.remove(new_filename)
    except:
        print("{} does not exists".format(new_filename))
    os.rename(filename,new_filename)
    # remove everything after EOF
    with open(new_filename,"r") as f:
        content = f.read()
    content = content.split("# EOF")[0]
    with open(new_filename,"w") as f:
        f.write(content)
    print(os.listdir())
    
    sys.exit()
    

    # EOF之后的内容会进行实际的“上传”,并确保当您尝试将其导入其他地方时,不会重新“上传”它。请注意,在常规python中,您可以将其包装在if __name__ == "__main__"中,但是Mindstorms在运行时不会使用该约定。

  2. 将该项目发送到您的Hub并运行它。请注意,这些文件将保留在集线器上,并且我不知道是否需要担心内存限制。

  3. 使用以下命令创建一个新的python项目:

    import os
    
    import projects.mystorms as ms
    
    print(os.uname())
    ms.example()
    

以上应该可以。请注意,如果您需要更新文件,则必须调整模块代码以删除原始文件(如果存在),但这只是次要的更改。除上述内容外,我没有做任何其他事情,但是可以导致一种将stdlib缺少的内容也导入Mindstorms的方法。


还没有找到解决方案,但是我确实浏览了大多数标准库,以了解还有什么可以导入的,这与之相关...下面没有引发错误,但是我还没有尝试过与包装本身。

import array
import builtins
import cmath
import ctypes
import errno
import gc
import hashlib
import heapq
import io
import json
import math
import os
import random
import re
import select
import struct
import sys
import time

基本主题似乎是限制对文件系统的访问,并迫使所有异步操作都必须使用实际的Mindstorms方法(例如hub.speaker.start_beep()等)来完成。有一些目录结构(0-19文件),但是我还没有弄清楚是否可以将其用于实现所需的内容。

还需要注意的是,您不能import typing,但可以可以在函数中使用类型提示。我也非常讨厌您不能从控制台复制粘贴。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。