[英]Subprocess or import to invoke a script in Python
我有一個腳本task.py
我正在嘗試調用。 似乎有兩種方法可以做到這一點。 一種是使用subprocess
API,另一種是使用Python的導入機制。
task.py
def call_task():
print("task in progress...")
return "something"
print("calling task..")
out = call_task()
print("output of the executed task::", out)
現在,我們有兩種方法來調用上面的task.py python腳本。
方法1
import task as task
print("invoke call-task")
out = task.call_task()
print("output::", out)
方法2
import subprocess, shlex, PIPE
proc = subprocess.Popen(shlex.split("python task.py"), stdout = PIPE)
out = proc.communicate()
print("output::", out)
盡管兩種方法都有效,但是哪種方法更適合Python?
與Python運行單獨的Python進程通常是一種反模式。 在某些情況下,您特別想要兩個Python實例(例如,如果要使用的模塊需要自己的信號處理等),但是在沒有其他因素迫使其他選擇的情況下,就可用性而言, import
通常是非常可取的(您可以按照與包內部流程不同的順序調用包內的函數,並對內部結構進行更細粒度的控制)和性能(如果可以避免的話,啟動一個單獨的進程幾乎總是一個壞主意)。
雖然“子進程模塊允許您生成新進程”在您的task.py中執行代碼,但是導入將導致原始進程執行您的代碼。
除此之外,它應該是相同的。
您可以在Python子流程文檔中閱讀有關此內容的更多信息
如我所見,使用額外的子進程執行python代碼非常不尋常。
我可能會從性能上受益,但是
更多的pythonic方式將被導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.