簡體   English   中英

Python在子流程調用之前繼續運行導入的腳本

[英]Python Keep running my imported scripts before subprocess call

好的, newserial.py是我執行的主要腳本, trackid.py是我要通過subprocess.call("trackid.py",shell=True)執行的第二個腳本。 我將__init__.py放入其中,所有文件都放在同一文件夾中。

問題:但是,當我使用: import trackid ,它會在到達以下行之前自動執行腳本: subprocess.call("trackid.py",shell=True) 我閱讀了教程,說您應該放在我的代碼中:

def main():
  if__name__=="__main__" 
  ...

但是,這沒有幫助! 我在兩個腳本中都放了def main(): newserial.pytrackid.py

問題:
如何阻止這種情況的發生?
如何將trackid.py作為子trackid.py執行,並自動結束腳本並繼續執行主腳本newserial.py的其余行?
導入時如何防止同名函數發生沖突?
什么是最好的時候使用s ubprocess.call / subprocess.Popen什么都管了?

已經發現的提示的含義是,應將所有代碼包裝在trackid.py中,如下所示:

def mytrackid():
    all your code goes here
    bla print bla

if __name__ == '__main__':
    mytrackid()

導入模塊時,將執行不在函數或類中的所有代碼。

if __name__ == '__main__':

您確保僅當模塊實際上是主模塊時才執行此部分。

如果僅通過trackid.py subprocess.call()調用trackid.py ,則根本不需要導入它。

僅當模塊包含要在執行導入的腳本中調用的函數時,才導入模塊,因此

script1.py

def myfun():
   do stuff

def myfun2():
   return(results)

script2.py

import script1

script1.myfun()
print script1.myfun2()

導入模塊時,將執行功能中未包含的任何代碼,因此會出現問題。 通常,如果腳本獨立運行,則使用if __name__ == __main__構造來添加為測試目的而運行的代碼。

在這種情況下,將來自trackid.py的代碼放在if __name__...塊中將確保僅在執行if __name__... subprocess.call()時執行該代碼, trackid.py在導入模塊時執行,但是,我不確定為什么要這樣做想要這樣做; subprocess模塊通常用於執行非python代碼。

我認為您可能想做的是擁有trackid.py如我的script1 ,在其上面包含可以在導入后從newserial.py調用的newserial.py

暫無
暫無

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

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