26

我有script1.py哪些电话script2.py (subprocess.call([sys.executable, "script2.py"])。但需要已知的script2.py变量。我尝试了一个非常简单的,但它似乎不起作用。xscript1.pyimport 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)都不起作用。我得到“BLAH”,但没有得到“HELLO”。

4

7 回答 7

31

正确的语法是:

from script1 import x

因此,从字面上看,“从 script1.py 导入“x”对象。”

于 2013-10-10T07:08:14.003 回答
6

尝试这个:

from script1 import x

我刚刚运行了以下代码,它工作了

脚本1:

c = 10

脚本2:

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 作为函数参数,并用它做任何你需要做的事情。

于 2013-10-10T07:11:35.737 回答
5

您的代码正在循环,因为subprocess.Popen调用在模块初始化代码中,所以它会在导入 script1 时被 script2 调用(创建一个新的 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可以在运行时更改,您将需要一个实际的进程间通信方法。

于 2013-10-17T09:30:10.337 回答
2

脚本1.py:

x = 2
from script2 import *

脚本2.py:

from script1 import x
print x
于 2013-10-10T07:12:12.710 回答
2

脚本 0:

#!/usr/bin/env python
from script1 import x

print x

脚本 1:

#!/usr/bin/env python
x = "Hello world"

输出:

Hello world

所以是的,它确实有效,不需要子流程。

于 2015-11-20T07:38:07.940 回答
0

我认为您必须通过在 script2.py 中为其模块名称(即 script1.x)添加前缀来引用该变量

于 2013-10-10T07:07:59.053 回答
0

使用的方法比必要的复杂。修复 BO 后(我认为它是字符串文字,所以我引用了它),并假设脚本位于同一位置,您可以调用 script2 并获得您想要的结果。

请参阅以下内容:

#script1.py
print "BLAH"
x = "BO"

#script2.py
from script1 import x
print "HELLO"
print x

$ python script2.py 
BLAH
HELLO
BO
于 2019-07-04T15:58:12.717 回答