我有一个简短但对我来说非常重要的问题:
我想将已经运行的活动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?我很抱歉,我对术语不太熟悉。
我希望我的意思变得清晰,我尽力解释它。 我有点绝望,希望你能帮忙。我已经试过并搜索各种各样的东西,但它只是没有用。
答案 0 :(得分:0)
要获得这样的变量工作空间,您需要某种形式的进程间通信,共享内存或存储。
它可以像具有已知格式的文件(可能是JSON或pickler序列化)和锁定机制一样简单,以确保读者等待文件完全写入。锁定可以通过在写入时创建一个单独的文件来实现,并在完成时删除。
通过套接字可以实现进程间通信,TCP套接字可能是最简单的。您长时间运行的脚本将运行TCP侦听器,并且读取过程将连接并从中读取。这可能会变得奇怪,因为Python有一个全局解释器锁,并且必须在这些通信期间阻止。没有工作可以执行。 Twisted是一个可以解决这个问题的异步框架。协调可用性来倾听和做其他工作可能非常棘手。
共享内存与文件具有相似的互斥复杂性,因此需要为编写器指定专用内存地址来指定其写锁定。
我认为该文件最简单。长时间运行的进程将完成其工作,创建锁定文件,将变量序列化为JSON(或任何您想要的),然后删除锁定文件,然后重复。独立地,读取过程将检查锁定文件,如果它没有,它将读取变量文件并继续使用所需的变量。