Python从运行脚本获取变量并传递给另一个Python脚本

时间:2015-06-26 23:11:28

标签: python bash variables environment

我有一个简短但对我来说非常重要的问题:

我想将已经运行的活动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?我很抱歉,我对术语不太熟悉。

我希望我的意思变得清晰,我尽力解释它。 我有点绝望,希望你能帮忙。我已经试过并搜索各种各样的东西,但它只是没有用。

1 个答案:

答案 0 :(得分:0)

要获得这样的变量工作空间,您需要某种形式的进程间通信,共享内存或存储。

它可以像具有已知格式的文件(可能是JSON或pickler序列化)和锁定机制一样简单,以确保读者等待文件完全写入。锁定可以通过在写入时创建一个单独的文件来实现,并在完成时删除。

通过套接字可以实现进程间通信,TCP套接字可能是最简单的。您长时间运行的脚本将运行TCP侦听器,并且读取过程将连接并从中读取。这可能会变得奇怪,因为Python有一个全局解释器锁,并且必须在这些通信期间阻止。没有工作可以执行。 Twisted是一个可以解决这个问题的异步框架。协调可用性来倾听和做其他工作可能非常棘手。

共享内存与文件具有相似的互斥复杂性,因此需要为编写器指定专用内存地址来指定其写锁定。

我认为该文件最简单。长时间运行的进程将完成其工作,创建锁定文件,将变量序列化为JSON(或任何您想要的),然后删除锁定文件,然后重复。独立地,读取过程将检查锁定文件,如果它没有,它将读取变量文件并继续使用所需的变量。