簡體   English   中英

兩個python程序之間的通信

[英]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 方法運行的另一個程序中增加,則您的第二個程序有它自己的gscore0 。當您想要訪問的程序中有某種函數庫時,導入更多。

您想要的是能夠在運行時讀取其他程序生成的值。 這不能用 python 變量來完成,但可以通過許多其他方式來完成。 一種常見的方法是將樂譜寫入文件,然后在其他程序中讀取該文件。 如果您需要有關如何讀取和寫入文件的信息,請在此處閱讀本指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM