我如何 运行 一个 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 脚本。
我正在使用 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 脚本。