我有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)都不起作用。我听到的是“嘘”而不是“你好”。
您的代码正在循环,因为
subprocess.Popen
调用位于模块初始化代码中,所以在导入script1(创建同时导入script1的新script2进程…)时,script2将调用它将python文件同时用作脚本和模块的The recommended way方法是使用
__name__
变量但也认为这只适用于常数。如果
x
可以在运行时更改,则需要实际的进程间通信方法。试试这个:
我刚刚运行了下面几段代码
脚本1:
c = 10
脚本2:
第二个脚本按预期打印了整数10。
10月17日编辑: 就目前的情况来看,代码要么不会产生如所示的“Hello”,要么将进入无限循环。有几个问题:
从目前的情况看,薄熙来还没有定义。执行script1时,将打开script2的子进程。当script2调用script1时,它将打印blah,但在x=BO上失败,因为BO未定义。
因此,如果通过使用say a string指定BO来修复这个问题,它将进入一个无限循环(每个脚本调用另一个脚本并打印x、Hello和Blah)。
一种可能的解决方法是通过函数调用传递x。因此,script2可以将x作为函数参数,并对它执行任何需要执行的操作。
正确的语法是:
所以,字面意思是,“从script1.py导入”x“对象
相关问题 更多 >
编程相关推荐