【问题标题】:Python: Sending a variable to another scriptPython:将变量发送到另一个脚本
【发布时间】:2010-06-17 22:27:12
【问题描述】:

我是 python 新手,在工作中有点陷入困境。

如果我有一个创建如下列表的脚本:

test = 'string'

l = []

for i in test:
    l.append(i)

print l

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

【问题讨论】:

  • this 是什么意思:变量 l,还是它的打印表示?
  • 请注意,整个代码可以替换为更短的l = list(test)

标签: python


【解决方案1】:

我假设您想将在名为 first.py 的脚本中定义的变量 some_list 用于名为 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中的函数

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

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

我希望这是您所需要的。

【讨论】:

  • 请不要使用小写的 L 作为变量名,它看起来像数字一,不必要地混淆。
  • @taleinat:是的,我同意,我改成了 "list"
  • 不幸的是,调用变量list 隐藏了内置的list 这是列表类型,所以这也是Python,IMO 中一个糟糕的名称选择。尝试charschar_listlst 以求简洁。
【解决方案2】:

尚不清楚您的第一个脚本本身是否正在运行第二个脚本,或者它们是否被外部的东西一个接一个地调用。无论哪种情况,将列表传递给第二个进程的简单方法是通过标准输入,其中数据本身是列表的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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        $ 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()
        

        $ 猫三.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 中设置 无 - 当没有调用同一个类实例时 缓存。

        【讨论】:

          猜你喜欢
          • 2014-01-25
          • 1970-01-01
          • 2020-12-30
          • 2019-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多