将变量从一个python脚本导入另一个

2024-09-26 18:17:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有script1.py调用script2.py (subprocess.call([sys.executable, "script2.py"])。但是script2.py需要x中已知的变量script1.py。我试了一个非常简单的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

调用script2的所有3种情况(subprocess.call、os.system、subprocess.Popen)都不起作用。我听到的是“嘘”而不是“你好”。


Tags: frompyimporttrueossysshellcall
3条回答

您的代码正在循环,因为subprocess.Popen调用位于模块初始化代码中,所以在导入script1(创建同时导入script1的新script2进程…)时,script2将调用它

将python文件同时用作脚本和模块的The recommended way方法是使用__name__变量

#script1.py

x = BO

if __name__ == "__main__":
    import subprocess, sys
    subprocess.Popen("C:\\...\\Desktop\\script2.py", shell=True)
    print "BLAH"

但也认为这只适用于常数。如果x可以在运行时更改,则需要实际的进程间通信方法。

试试这个:

from script1 import x

我刚刚运行了下面几段代码

脚本1:

c = 10

脚本2:

from script1 import c
print c

第二个脚本按预期打印了整数10。

10月17日编辑: 就目前的情况来看,代码要么不会产生如所示的“Hello”,要么将进入无限循环。有几个问题:

从目前的情况看,薄熙来还没有定义。执行script1时,将打开script2的子进程。当script2调用script1时,它将打印blah,但在x=BO上失败,因为BO未定义。

因此,如果通过使用say a string指定BO来修复这个问题,它将进入一个无限循环(每个脚本调用另一个脚本并打印x、Hello和Blah)。

一种可能的解决方法是通过函数调用传递x。因此,script2可以将x作为函数参数,并对它执行任何需要执行的操作。

正确的语法是:

from script1 import x

所以,字面意思是,“从script1.py导入”x“对象

相关问题 更多 >

    热门问题