【问题标题】:How to share a variable between 2 pyRevit scripts?如何在 2 个 pyRevit 脚本之间共享一个变量?
【发布时间】:2018-03-10 00:35:02
【问题描述】:

我使用的是最新版本的 pyRevit,v45。 我正在使用

在临时文件中写入一些信息
myTempFile = script.get_instance_data_file("id")

这将创建一个名为 pyRevit_2018_xxxx_id.tmp 的文件,我在其中存储有用的信息。如果我没记错的话,每次我重新加载 Revit 时,“xxxx”部分都会发生变化。现在,我需要从另一个 pyRevit 脚本访问这些信息。

如何检索我需要读取的临时文件的名称?换句话说,我如何从不知道“myTempFile”名称的第二个脚本中访问“myTempFile”?

我想我可以在我的脚本之间以某种方式共享该变量,但正确的方法是什么?我知道这一定是一个非常基本的编程问题,但我确实不是程序员;)

非常感谢, 阿诺。

【问题讨论】:

    标签: revit-api pyrevit


    【解决方案1】:

    好的,我现在意识到我在第一个脚本中的变量在执行后不再存在。 所以现在我把文件名写在另一个文件中,我知道它的名字..这行得通。

    但如果有更清洁的方法可以做到这一点,我很乐意学习 ;)

    阿诺

    【讨论】:

    • 您的假设是正确的。变量在它们执行的范围内存在。您可以使用一种称为可扩展存储的机制将它们存储在模型中,如果这是您的用例,稍后可以重新使用。有关 ES archi-lab.net/what-why-and-how-of-the-extensible-storage 的更多信息,请参见此处
    【解决方案2】:

    pyrevit.script 模块根据用例提供了 4 种不同的方法来创建临时文件:

    get_instance_data_file: 对于标有 Revit 实例 pid 的数据文件。这意味着在另一个实例上运行的脚本不会看到这个临时文件。 http://pyrevit.readthedocs.io/en/latest/pyrevit/script.html#pyrevit.script.get_instance_data_file

    get_universal_data_file: 对于所有 Revit 实例和版本都可以访问的临时文件 http://pyrevit.readthedocs.io/en/latest/pyrevit/script.html#pyrevit.script.get_universal_data_file

    get_data_file: 获取当前 Revit 版本的标准临时文件的基本方法 http://pyrevit.readthedocs.io/en/latest/pyrevit/script.html#pyrevit.script.get_data_file

    get_document_data_file: 用活动文档标记的临时文件(因此在另一个文档上工作的脚本不会看到这个) http://pyrevit.readthedocs.io/en/latest/pyrevit/script.html#pyrevit.script.get_document_data_file

    每个方法都使用一个模式来创建临时文件名。所以只要不同脚本对方法的调用是相同的,方法就会生成相同的文件名。

    例子:

    脚本 1:

    from pyrevit import script
    tfile = script.get_data_file('mydata')
    

    脚本 2:

    from pyrevit import script
    tempfile = script.get_data_file('mydata')
    

    在这个例子中 tempfile = tfile 因为文件 id 是相同的。

    每个都有文档,因此请务必查看这些文档并选择适合您目的的风味。

    【讨论】:

      最近更新 更多