我有一个Python应用程序,它模拟系统的行为,比如说汽车
该应用程序定义了一组相当大的变量,其中一些对应于真实世界的参数(剩余燃油量、车速等),另一些与用户不感兴趣的模拟器内部力学相关
一切正常,但当前用户在执行过程中无法与模拟进行任何交互:她只需设置模拟参数、启动模拟并等待模拟终止
我希望用户(即而不是应用程序的创建者)能够在应用程序之外编写Python脚本,可以读取/写入与真实世界参数相关的变量(并且仅限于这些变量)
例如,在t=23s时(我知道如何检查这个条件),我想执行用户脚本gasLeak.py
,它读取剩余的燃料值并将其设置为当前值的一半
总之,如何从Python主应用程序执行用户编写的Python脚本,这些脚本只能访问和修改主脚本变量的预定义子集。在一个完美的世界中,我还希望在应用程序运行期间应用于用户脚本的修改被考虑在内,而无需重新启动所述应用程序(在模块运行过程中)
让用户编写的脚本读取命令行参数并打印到
stdout
。然后,您可以使用subprocess
模块调用它们,将它们需要知道的变量作为参数,并使用subprocess.check_output
读取它们的响应实现这一点的一种方法是将应用程序属性封装在一个类中,并使您想要对用户隐藏的变量“私有”,或者更确切地说是伪私有,因为Python没有真正的访问修饰符。通过使用下划线,可以有效地实现可变私有化。看到这个post. 变为“private”的变量在类定义之外是不可访问的,因此它们对用户脚本是隐藏的
相关问题 更多 >
编程相关推荐