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