簡體   English   中英

子流程或導入以在Python中調用腳本

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

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