我有一个正在尝试调用的脚本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/