子进程或导入以在Python中调用脚本

时间:2018-02-19 08:32:57

标签: python python-3.x subprocess python-import python-2.x

我正在尝试调用脚本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)

虽然这两种方法都有效,但哪种方法更具有pythonic?

2 个答案:

答案 0 :(得分:2)

从Python运行单独的Python进程通常是反模式。在某些情况下,您明确想要两个Python实例(例如,如果您要使用的模块需要自己的信号处理等),但在没有强制其他选择的因素的情况下,{{1在可用性方面通常非常优先(你可以按照与主流不同的顺序调用包内的函数,并对内部进行更精细的控制)和性能(开始一个单独的进程几乎总是如此)如果你可以避免它,那是一个坏主意。)

答案 1 :(得分:0)

while"子进程模块允许您生成新进程"在task.py中执行代码, 导入将导致原始进程执行您的代码。

除此之外,它应该是相同的。

您可以在Python Subprocess Docs

中详细了解相关信息

正如我所见,使用额外的子进程执行python代码相当不寻常。

它可能会对性能有所裨益,但我想猜的是更多的pythonic方式。