我是python的新手,在工作中深陷困境。Python:将变量发送到另一个脚本
如果我有具有创建一个列表,如下面的脚本:
test = 'string'
l = []
for i in test:
l.append(i)
print l
如何将我送这到另一个python脚本?
我是python的新手,在工作中深陷困境。Python:将变量发送到另一个脚本
如果我有具有创建一个列表,如下面的脚本:
test = 'string'
l = []
for i in test:
l.append(i)
print l
如何将我送这到另一个python脚本?
我假设你想使用一个名为first.py
脚本定义为所谓的second.py
所以第二个脚本变量some_list
这将是:
$ 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
在第二个文件中被定义为一个功能你导入并使用它。
您可以在模块中运行任意代码并声明变量,但如果将它们放置在函数(或类)中,则会更好,如上所示。
我希望这是你所需要的。
这取决于你是否是说发送的计算结果到另一个,单独运行的Python程序,或者干脆共享与多文件项目的另一个组成部分造成的。
在前一种情况下,您需要使用某种进程间通信 - 一些示例将结果写入文件并从另一个进程读取结果,在两个进程之间建立套接字或使用一个信号量。
在后一种情况下,使用Python的概念modules与项目中的另一个脚本共享此计算的结果。
我建议看看Shelve和Pickle模块。它们允许您以可在启动之间存储或在脚本之间共享的方式序列化数据。
您不清楚您的第一个脚本本身是否正在运行第二个脚本,或者是否是通过某种外部方式一个接一个地调用它们。在任何一种情况下,将列表传递给第二个进程的简单方法是通过stdin,其中数据本身是列表的pickle。
例如:
script1.py:
import sys
import pickle
list = [item for item in test]
pickle.dump(list, sys.stdout)
SCRIPT2。潘岳:
import sys
import pickle
list = pickle.load(sys.stdin)
for item in list:
print item
运行:script1.py | script2.py
$猫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
$猫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()
$猫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是集缓存了 。
这是什么意思? – OscarRyz 2010-06-17 22:28:05
'this'是什么意思:变量l或它的打印表示? – ChristopheD 2010-06-17 22:29:06
请注意,整个代码可以用更简短的'l = list(test)'代替。 – EOL 2010-06-18 10:11:09