[英]Communication between two python programs
請幫助我理解為什么這不起作用以及如何更改它。 我基本上希望能夠從程序二中查詢程序一的 var 的值。 所以這里是最基本的程序:
P1:
import time
gscore = 0
def get_info():
return gscore
def main():
global gscore
score = 0
while score <10:
time.sleep(1)
score +=1
gscore = score
print(score)
if __name__ == '__main__':
main()
P2:
from functest import get_info
print(get_info())
結構可能看起來有點奇怪,但基本上我有一個現有的小型 python 游戲並且希望能夠查詢分數,這就是我以這種方式對其進行調整的原因。 所以 P1 顯然計數到 10 但 P2 總是得到 0 作為返回值。 我覺得我在這里犯了一個非常愚蠢的錯誤......感謝幫助:)
當你在 Python 中import
一個模塊時,你並不是在執行它的內容。 if __name__ == "__main__":
是否可以讓您的 Python 文件充當可重用模塊或獨立程序。
如果要執行main()
函數,則需要顯式調用它。:
from functest import main, get_info
main() # calling the main function in your functest file
print(get_info()) # calling the get_info function
這將返回您正在尋找的值。
現在, main
如果執行functest.py文件將被稱為:
$ python functest.py
#=> 9
if __name__ == '__main__'
僅在您從 shell 運行代碼時執行,而不是在從另一個程序導入程序時執行。 要解決此問題,您可以將程序修改為:
在您 P1 中,將 get_info 修改為:
def get_info():
global gscore
return gscore
在您的 P2 中執行以下操作:
from functest import main, get_info
main()
print(get_info())
另外,請注意,有更好的方法來做你正在做的事情,比如使用類而不是創建全局變量。
class Score(object):
def __init__(self, gscore=0):
self.gscore = gscore
def get_info(self):
return self.gscore
def increment(self, score=0):
while score < 10:
score +=1
self.gscore = score
當您導入另一個程序的功能時,您是在導入該程序的功能,而不是該程序的實際實例。 我的意思是你的程序在運行時只計數到 10,但 10 不是代碼的一部分,它是結果。
導入它允許你做的是運行你導入的代碼(在你的情況下,運行get_info
代碼, gscore = 0
是返回的gscore
,但是,這是你其他程序的一個不同實例,所以即使如果gscore
在您使用 main 方法運行的另一個程序中增加,則您的第二個程序有它自己的gscore
為0
。當您想要訪問的程序中有某種函數庫時,導入更多。
您想要的是能夠在運行時讀取其他程序生成的值。 這不能用 python 變量來完成,但可以通過許多其他方式來完成。 一種常見的方法是將樂譜寫入文件,然后在其他程序中讀取該文件。 如果您需要有關如何讀取和寫入文件的信息,請在此處閱讀本指南。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.