【问题标题】:How to enable other programs to modify existing program如何使其他程序能够修改现有程序
【发布时间】:2013-09-11 21:54:35
【问题描述】:

我正在创建一个类似于this 的python 程序 .无论如何,我想做的是让用户能够修改自己的程序,但我需要帮助理解它是如何工作的。我已经查看了源代码并且很困惑这种情况发生在哪里,即使有人可以指出我会非常有帮助。我知道这些程序不会被沙盒化,但这并不是我现在担心的事情。如果您能指出我的任何方向,那就太好了!谢谢!

【问题讨论】:

  • 我认为这里有一个XY problem — 您真正的问题不是您实际提出的问题。你真正想知道的是如何在单独的 Python 解释器中运行其他一些 Python 脚本,对吧?

标签: python artificial-intelligence


【解决方案1】:

“机器人程序”只是存储为纯文本文件。

editor.py 中有一个通用文本编辑器。当您在给定视图中打开机器人时,例如 qt4view.py 中的 Qt4 视图,它只是实例化一个文本编辑器并将机器人的文件交给它。同样,机器人的文件是 Python 脚本这一事实并不重要。它只是将其编辑为文本文件。

同时,战斗代码打开的机器人文件与文本编辑器作为文本文件打开的 Python 代码相同。您可以在game.py 中看到这段代码:它只是使用subprocess 模块来运行Python,将机器人文件作为参数传递。

【讨论】:

  • 没有editor.py文件能写出类似的程序吗?就像让用户编写一个新的机器人对象,然后将其保存到某个文件夹中一样。
  • @user2251164:当然。事实上,如果您愿意,pybotwar 也可以以这种方式工作,正如文档所解释的那样(看起来如果您在没有 PyQt4 的情况下构建它,这是您可以使用它的唯一方法)。如果你想在没有编辑器的情况下写东西,就不要写编辑器。
【解决方案2】:

我的其他答案涉及您实际询问的内容。但我认为这不是你真正想知道的。

您只是想知道如何在单独的 Python 解释器中运行一些您有路径名的 Python 脚本,对吧?

虽然可以从 pybotwar 代码中弄清楚这一点,但还有很多额外的东西会妨碍理解它——conf.py 文件、可配置的额外标志等。

但答案很简单:使用subprocess 模块,就像运行any 程序一样。在这种情况下,Python 解释器是可执行文件(通常你想要sys.executable,你正在使用的同一个 Python 解释器),以及你想要作为参数运行的脚本。例如:

script_output = subprocess.check_output([sys.executable, script_path])

subprocess 文档很好地解释了所有不同的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多