[英]Pass variable between python scripts
我确信这很简单,但我一直无法让它正常工作。 我需要让我的主要 python 脚本调用另一个 python 脚本并将变量从原始脚本传递给我调用的脚本
所以对于一个简单的例子,我的第一个脚本是,
first.py
x = 5
import second
我的第二个脚本是,
second.py
print x
我希望它打印 x 但我得到
NameError: name 'x' is not defined
我不确定导入是否是实现这一目标的正确方法,但如果有人能以一种简单的方式阐明它,那就太好了!
谢谢,
编辑
阅读评论后,我想我会扩展我的问题。 Aswin Murugesh 的回答解决了我遇到的导入问题,但是该解决方案没有达到预期的结果,因为我似乎无法以这种方式传递列表中的项目。
在 first.py 中,我有一个列表,我按如下方式处理
for insert, (list) in enumerate(list, start =1):
'call second.py passing current list item'
我想将列表中的每个项目传递给第二个 python 文件以进行进一步处理(网络抓取),我不想在 first.py 中执行此操作,因为这是主要的“扫描”程序,然后调用其他程序程式。 我希望这现在更有意义。
感谢您到目前为止的评论。
调用脚本时,调用脚本可以访问被调用脚本的命名空间。 (在您的情况下, first可以访问second的命名空间。)但是,您要求的是另一种方式。 您的变量在调用脚本中定义,并且您希望被调用脚本访问调用者的命名空间。
在这个 SO 帖子中,问题本身已经给出了答案:
但我只会在你的上下文中解释它。
要在您的情况下获得您想要的内容,请使用以下行开始调用脚本:
from __main__ import *
这允许它访问调用者脚本的命名空间(所有变量和函数)。
所以现在你的调用脚本和以前一样:
x=5
import second
被调用的脚本是:
from __main__ import *
print x
这应该可以正常工作。
使用以下脚本:
第一个.py:
x=5
第二个.py
import first
print first.x
这将打印 x 值。 应使用脚本名称引用始终导入的脚本数据,例如first.x
为避免命名空间污染,请单独导入所需的变量: from __main__ import x
,依此类推。 否则,您最终会遇到您不知道的命名冲突。
尝试使用 exec Python3.5:
第一个.py
x=5
exec(open('second.py').read())
第二个.py
print(x)
您还可以使用以下方法传递 x:
x=5
myVars = {'x':x}
exec(open('second.py').read(), myVars)
不确定这是否是一个好方法。
最后,
我为 Python 创建了一个包来解决这个问题。
$ pip install guli
Guli 不需要安装任何额外的 PIP 包。
Guli 可用于在不同的 Python 脚本之间、多个进程之间或在同一个脚本之间传递。 在主进程和另一个(多进程)进程之间传递变量。
import guli
import multiprocessing
string = guli.GuliVariable("hello").get()
print(string) # returns empty string ""
def my_function():
''' change the value from another process '''
guli.GuliVariable("hello").setValue(4)
multiprocessing.Process(target=my_function).start()
import time
time.sleep(0.01) # delay after process to catch the update
string = guli.GuliVariable("hello").get()
print(string) # returns "success!!!"
希望我为很多人解决了问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.