python - 如何运行带有参数的 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
数据存储以获取最大的免费存储空间。感谢您花时间阅读本文。
解决方案
我怀疑你的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)
然后你可以简单地导入script2
并script1
直接运行代码:
# script 1
from script2 import main
args = get_args() # dummy fn
main(*args)
这是“更好的”,因为它不涉及仅仅为了运行 python 代码而产生一个全新的 python 进程,而且它通常会产生更整洁的代码。但是没有什么能阻止你像调用其他任何东西一样调用 python 脚本。
推荐阅读
- java - 可执行 jar 永久运行
- android - 覆盖 Lollipin 加密的盐
- python-3.x - Python 3.7、tkinter、jpg:无法识别图像文件中的数据
- laravel - 为产品设计数据结构
- javascript - 复制粘贴在 Mozilla Firefox 中不起作用
- python - 在无法从外部访问的 VM 上运行的 Flask
- java - docx4j 从其他 .docx 问题导入样式
- git - 克隆 git 存储库时自动设置自定义挂钩?
- javascript - 基于重定向页面
- visual-studio - 从 UnityEngine.GameObject 平面创建 UnityEngine.Plane