[英]Importing a variable from one python script to another
我有script1.py
调用script2.py (subprocess.call([sys.executable, "script2.py"])
。但是script2.py
需要在script1.py
已知的变量x
。我尝试了一个非常简单的import x from script1
,但它似乎无法正常工作。
这是正确的使用方法吗? 例如:
#script1.py
import subprocess, sys
##subprocess.call([sys.executable, 'C:\\...\\Desktop\\script2.py'], shell=True)
##os.system("C:\\...\\Desktop\\script2.py")
subprocess.Popen("C:\\...\\Desktop\\script2.py", shell=True)
print "BLAH"
x = BO
#script2.py
from script1 import x
print "HELLO"
print x
所有3个调用script2(subprocess.call,os.system,subprocess.Popen)的情况都不起作用。 我得到“BLAH”而不是“HELLO”。
正确的语法是:
from script1 import x
所以,从字面上看,“从script1.py导入”x“对象。”
试试这个:
from script1 import x
我刚刚运行了以下代码片段并且工作正常
SCRIPT1:
c = 10
SCRIPT2:
from script1 import c
print c
第二个脚本按预期打印整数10。
10月17日编辑:现在代码将不会产生指示的“Hello”或将进入无限循环。 几个问题:
就目前而言,BO未定义。 执行script1时,将打开script2的子进程。 当script2调用script1时,它将打印出blah但在x = BO时失败,因为BO未定义。
所以,如果你通过用一个字符串指定BO来修复它,它将进入一个无限循环(每个脚本调用另一个脚本并打印x,Hello和Blah)。
修复它的一种可能方法是通过函数调用传递x。 因此,script2可以将x作为函数参数,并做任何你需要做的事情。
您的代码是循环,因为subprocess.Popen
通话是在模块初始化代码,则其将被导入SCRIPT2 SCRIPT1时被调用(创建一个新的SCRIPT2的过程,也进口SCRIPT1 ...)
将 python文件用作脚本和模块的推荐方法是使用__name__
变量
#script1.py
x = BO
if __name__ == "__main__":
import subprocess, sys
subprocess.Popen("C:\\...\\Desktop\\script2.py", shell=True)
print "BLAH"
但也要考虑这只适用于常数 。 如果x
可以在运行时更改,则需要实际的进程间通信方法。
script1.py:
x = 2
from script2 import *
script2.py:
from script1 import x
print x
脚本0:
#!/usr/bin/env python
from script1 import x
print x
脚本1:
#!/usr/bin/env python
x = "Hello world"
输出:
Hello world
所以它确实有效,不需要子流程。
我认为你必须通过在script2.py中为其模块名称(即script1.x)添加前缀来引用该变量
使用的方法比必要的更复杂。 修复BO之后(我假设它是一个字符串文字,所以我引用它),并假设脚本位于同一位置,你可以调用script2并获得你所追求的结果。
请参阅以下内容:
#script1.py
print "BLAH"
x = "BO"
#script2.py
from script1 import x
print "HELLO"
print x
$ python script2.py
BLAH
HELLO
BO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.