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

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

我有一个正在尝试调用的脚本task.py。似乎有两种方法可以做到这一点。一种是使用 subprocess API,另一种是使用 Python 的导入机制。

任务.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?

最佳答案

从 Python 中运行单独的 Python 进程通常是一种反模式。在某些情况下,您特别想要两个Python实例(例如,如果您想要使用的模块需要自己的信号处理等),但在没有强制其他选择的因素的情况下, import 通常在可用性(您可以按照与主流程不同的顺序调用包内的函数,并且对内部有更细粒度的控制)和性能(启动一个单独的进程)方面非常可取如果你能避免的话,这几乎总是一个坏主意)。

关于python - 子进程或导入以在 Python 中调用脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862112/

相关文章:

python - 未使用变量

Python - openpyxl - 删除列表中的多个选项卡

python - 最大成对产品快速解决方案

python - 遍历类文件和调用 readline 之间的区别

python - 在 TensorFlow 中关闭服务器

python - PyInstaller 不包含导入

python - 在 Python 中模拟套接字连接

python-3.x - 与 django react 的计算机视觉视频帧结果

python - 如何用Python代码运行Windows powercfg的功能?

python - 从代码注入(inject)中传递给子进程的参数是否安全?