Python:将变量发送到另一个脚本

时间:2010-06-17 22:27:12

标签: python

我是python的新手,并且在工作中深陷其中。

如果我有一个脚本,它创建了一个列表,如下所示:

test = 'string'

l = []

for i in test:
    l.append(i)

print l

我如何将其发送到另一个python脚本?

5 个答案:

答案 0 :(得分:3)

我假设您要将名为some_list的脚本中定义的变量first.py用于名为second.py的第二个脚本

所以它会是:

$ cat first.py second.py 
#first.py
def demo():
    some_list = []
    for i in 'string':
         some_list.append( i )
    return some_list

#second.py 
from first import demo

some_list = demo()
print some_list 

$python second.py
['s', 't', 'r', 'i', 'n', 'g']

文件中的代码声明为代码模块。要使用它,您必须使用:

from 模块 import 事物

所以在这种情况下,函数demo被定义为模块first中的一个函数

在第二个文件中导入并使用它。

您可以在模块中运行任意代码并声明变量,但如果将它们放在函数(或类)中则更好,如上所示。

我希望这就是你所需要的。

答案 1 :(得分:2)

目前尚不清楚您是否第一个脚本本身正在运行第二个脚本,或者它们是否通过外部事件一个接一个地调用。在任何一种情况下,将列表传递给第二个进程的简单方法是通过stdin,其中数据本身是列表的pickle

例如:

script1.py:

import sys
import pickle
list = [item for item in test]
pickle.dump(list, sys.stdout)

script2.py:

import sys
import pickle
list = pickle.load(sys.stdin)
for item in list:
    print item

运行:script1.py | script2.py

答案 2 :(得分:1)

这取决于您是将发送计算结果发送给另一个,单独运行Python进程,还是仅仅共享结果与多文件的另一个组件项目

在前一种情况下,您将需要使用某种进程间通信 - 一些示例是将结果写入文件并从另一个进程读取它,在两个进程之间建立套接字,或使用信号量。

在后一种情况下,使用Python的modules概念与项目中的另一个脚本共享此计算的结果。

答案 3 :(得分:0)

我建议查看Shelve和Pickle模块。它们允许您以可在启动之间存储或在脚本之间共享的方式序列化数据。

答案 4 :(得分:0)

$ cat one.py

from functools import lru_cache
@lru_cache(maxsize=2048)
class One(object):
     def __init__(self):
         self.a = None

     def set_a(self,val):
         self.a = val

     def get_a(self):
         return self.a


class One_nocache(object):
     def __init__(self):
         self.a = None

     def set_a(self,val):
         self.a = val

     def get_a(self):
         return self.a

$ cat two.py

import one
import three

# Cache
second=one.One()
second.set_a(4)
three.print_cache()

# No cache
second=one.One_nocache()
second.set_a(4)
three.print_nocache()

$ cat three.py

import one
def print_cache():
    three=one.One()
    print(three.get_a())

def print_nocache():
    three=one.One_nocache()
    print(three.get_a())

$ py two.py

4
None
  

4 - 通过在one.py中调用缓存的类实例在three.py中设置   无 - 当类不是时调用相同的类实例   缓存。