[英]Python get variable from running script and pass to another Python script
我有一个简短但很重要的问题:
我想从已经运行的活动python脚本中将变量写入另一个python脚本。 所以我不想要这样的东西:
$ cat first.py second.py
#first.py
def demo():
some_list = []
for i in 'string':
some_list.append( i )
return list
#second.py
from first import demo
some_list = demo()
print some_list
$python second.py
['s', 't', 'r', 'i', 'n', 'g']
我希望正在运行的脚本(例如“ sent.py”)不断将变量写入某种“工作区”,然后例如通过另一个脚本(例如“ get.py”)访问这些变量。 否则,我必须在bash脚本中同时启动两个脚本。
因此,我可能正在寻找一种解决方案,该解决方案是先传递python进行bash,然后再次传递给python? 非常抱歉,我对术语不太熟悉。
我希望我的意思明白了,我尽力解释了一下。 我有些绝望,希望您能提供帮助。 我已经尝试过并用Google搜索各种各样的东西,但是那根本没有用。
为了获得这样的可变工作空间,您需要某种形式的进程间通信,共享内存或存储。
它可以像具有已知格式(可能是JSON或pickler序列化)的文件一样简单,并具有一种锁定机制,以确保阅读器一直等到文件被完全写入。 可以通过拥有一个单独的文件来实现锁定,该文件由编写者在写入时创建,并在完成时删除。
通过套接字可以实现进程间通信,而TCP套接字可能是最简单的。 您长时间运行的脚本将运行TCP侦听器,并且读取过程将进行连接并从中读取。 这可能会很奇怪,因为Python具有全局解释器锁,并且在这些通讯期间必须阻塞。 无法执行任何工作。 Twisted是一个可以解决此问题的异步框架。 协调收听和进行其他工作的可用性可能非常棘手。
共享内存与文件具有相似的互斥复杂性,因此共享内存需要一个专用的内存地址,以便编写器指定其写锁定。
我认为该文件是最简单的。 长时间运行的过程将完成其工作,创建锁定文件,将变量序列化为JSON(或您想要的任何内容),然后删除锁定文件,然后重复。 独立地,读取过程将检查锁定文件,如果缺少该文件,它将读取变量文件并根据需要继续使用变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.