首页 > 解决方案 > 如何运行带有参数的 python 文件作为另一个 python 文件中的变量?

问题描述

我正在使用此代码在 vCenter 环境中克隆虚拟机 (VM) 。它接受虚拟机名称、模板、数据存储等的命令行参数(例如$ clone_vm.py -s <host_name> -p < password > -nossl ....

我有另一个 Python 文件,我可以在其中按 free_storage 的降序列出数据存储卷。我已将具有最大可用存储空间的数据存储存储在一个变量ds_max中。(我们称之为 ds_info.py)
我想使用ds_max变量 fromds_info.py作为数据存储命令行参数的命令行参数clone_vm.py

我尝试将 os 模块导入ds_info.py并运行os.system(python clone_vm.py ....arguments...),但它没有将ds_max变量作为参数。

我是编码新手,我没有信心更改clone_vm.py数据存储以获取最大的免费存储空间。感谢您花时间阅读本文。

标签: pythonpython-3.ximport

解决方案


我怀疑你的os.system电话有问题,但你没有提供,所以我无法检查。

一般来说,使用当前范式是一个好主意,而公认的智慧 (TM) 是我们使用subprocess. 请参阅文档,但基本模式是:

from subprocess import run

cmd = ["mycmd", "--arg1", "--arg2", "val_for_arg2"]
run(cmd)

由于这只是一个列表,您可以轻松地将参数放入其中:

var = "hello"
cmd = ["echo", var]
run(cmd)

但是,如果您的其他命令实际上是一个python脚本,则更正常的是重构您的脚本,以便将主要功能包装在一个main按约定调用的函数中:

# script 2
...
def main(arg1, arg2, arg3):
    do_the_work

if __name__ == "__main__":
    args = get_sys_args() # dummy fn
    main(*args)

然后你可以简单地导入script2script1直接运行代码:

# script 1
from script2 import main
args = get_args() # dummy fn
main(*args)

这是“更好的”,因为它不涉及仅仅为了运行 python 代码而产生一个全新的 python 进程,而且它通常会产生更整洁的代码。但是没有什么能阻止你像调用其他任何东西一样调用 python 脚本。


推荐阅读