繁体   English   中英

在不导入/运行的情况下查看另一个Python文件的变量

[英]Viewing Variables of Another Python File Without Importing/Running

我已经尝试读取python文件并打印其变量了一段时间了。 是否可以在不导入或运行该文件的情况下查看和打印另一个文件的变量? 我已经搜索过的所有内容仅说明了如何导入或使用execfile等。(免责声明,我可能很傻)

这是我到目前为止的内容:

for vars in dir():
   print(vars)

现在,这对于从中运行的文件来说效果很好,但是当我尝试以下代码时:

for vars in file:
   print(vars)

(文件只是path.read())

好吧,它给了我文件中每个字符的新行。 我完全不知道我的循环是否正确。 我是否需要编写一些内容来手动找到每个变量,然后将其添加到列表中?

使用ast.parse解析代码,通过遍历具有body属性(代码块)的节点来递归地遍历节点,查找Assign对象并获取其targets (为对象分配值) (正在寻找)并获取其id属性(如果它们是Name对象)。

file.py替换为您要解析的python脚本的文件名后,尝试以下代码。

import ast
import _ast

def get_variables(node):
    variables = set()
    if hasattr(node, 'body'):
        for subnode in node.body:
            variables |= get_variables(subnode)
    elif isinstance(node, _ast.Assign):
        for name in node.targets:
            if isinstance(name, _ast.Name):
                variables.add(name.id)
    return variables

print(get_variables(ast.parse(open('file.py').read())))

不...是的。

问题是“变量”是常量还是真变量。

Python运行垃圾回收器。 当您运行/导入模块时,它将创建变量。 这些变量将具有基于其用法的范围。 一旦不再使用它们,垃圾收集器将从内存中删除对象。

如果为变量分配了固定值(例如i = 1 ),则可以像读取文本文件一样直接读取文件-因为它是文本文件。 如果要更改这些变量,可以简单地将其写为文本文件。 与任何文本匹配项一样,您将有责任跟踪文本中的变量。

如果变量是作为代码的一部分生成的,则否(例如,它在目录中生成文件列表并分配给变量)。 您可能需要导入模块,或者更改模块,以便将输出导出到单独的文件(例如csv),然后才能读取数据文件。

首先,您并不笨,只是没有多少人需要这样做。 另外,我想不出一种方法,不将变量移到单独的json或pickle文件中,然后稍后使用json.load(filename)或类似的东西在两个程序json.load(filename)其加载。 但这仅在其他程序正在评估它的情况下不更改它的情况下才有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM