[英]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.