我可以从另一个正在运行的 python 脚本访问列表吗
Posted
技术标签:
【中文标题】我可以从另一个正在运行的 python 脚本访问列表吗【英文标题】:Can I access a list from another running python script 【发布时间】:2017-10-29 17:34:42 【问题描述】:如果我有两个脚本,一个有一个列表并且当前正在运行,而另一个需要在第一个正在运行时访问该列表,我该怎么做?
例子
脚本 1
import random
example_list = []
while True:
example_list.append(random.randint(0,9))
脚本 2
x = example_list[i]
我无法更改脚本 1。 如何从脚本 2 访问在脚本 1 中创建的列表?
附:这只是一个例子,所以它的目的并不重要。
【问题讨论】:
list = list + random.randint(0,9)
是TypeError
。同样list
隐藏了内置类型list
:list() == []
。
您还在while True
中附加了一个列表,这有点傻。
我在想它们可能是一种使用 pickle 然后从那里获取数据的方法,但我不知道是否可以在不编辑第一个脚本的情况下做到这一点。
【参考方案1】:
不!你做不到。至少在 python 中。
您无法访问另一个正在运行的进程中的变量。
【讨论】:
你知道我是否可以用pickle保存脚本1的执行状态,并从那里访问列表。 不!您无法使用 pickle 或任何其他库保存执行状态。 @ElisByberi 我认为 pyrasite (www.pyrasite.com) 允许您连接到正在运行的 python shell(基于 pid),从中读取数据或注入代码。 @Sharad 从理论上讲,无法在运行的 python 脚本中注入、编辑或任何您可能想要做的更改。我们说“运行 python 脚本”,但它不再是脚本了。它已被翻译成 C 语言并从 C 语言翻译成机器二进制代码。如果不重新加载脚本执行,您将无法做到这一点,这不是我们想要的。【参考方案2】:我认为您正在寻找的是进程间通信 (IPC),其中第一个脚本正在填充一个变量,而第二个脚本想要使用它。 IPC 可能有多种机制——消息队列、共享文件等。 如果您的要求很简单,例如捕获列表内容(并且列表仅包含字符串、整数)以便其他脚本可以使用它,您可以将其作为 python 代码或 JSON 转储到已知文件中,并从第二个脚本中读取。您可以腌制数据并在文件中捕获腌制数据并在第二个脚本中取消腌制 - 提供列表中的数据是可腌制的。
【讨论】:
我试图在第一个脚本运行时访问数据,而不更改第一个脚本的代码。我试图弄清楚它们是否是一种在不更改第一个脚本的情况下从第二个脚本访问该数据的方法。 看看 pyrasite - pyrasite.com。这允许您连接到正在运行的 python shell,从中读取数据或注入代码。【参考方案3】:如果您可以使用多处理(一个进程启动另一个进程),那么您可以使用多处理功能共享列表。看看Multiprocesssing
【讨论】:
这行不通,因为我试图在第一个脚本运行时访问它的数据,所以我无法编辑它,因为这需要我停止脚本。 您可以使用gdb访问正在运行的进程并转储内存堆。我见过解释堆以查找字符串变量的实例,但它需要的知识比我必须做的要多。检查blog.holbertonschool.com/hack-the-virtual-memory-python-bytes以上是关于我可以从另一个正在运行的 python 脚本访问列表吗的主要内容,如果未能解决你的问题,请参考以下文章