我如何 运行 一个 python 文件将参数作为来自另一个 python 文件的变量?

How do I run a python file with arguments as variables from another python file?

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

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

中数据存储命令行参数的命令行参数

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

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

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

通常使用当前范式是个好主意,公认的智慧 (TM) 是我们使用 subprocess。参见the docs,但基本模式是:

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)

然后你可以直接从script1和运行导入script2代码:

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

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