#python #python-3.x #import
Вопрос:
Я работаю над клонированием виртуальной машины (ВМ) в среде vCenter, используя этот код. Он принимает аргументы командной строки для имени виртуальной машины, шаблона, хранилища данных и т. Д. (Например $ clone_vm.py -s <host_name> -p < password > -nossl ....
)
У меня есть еще один файл Python, в котором я смог перечислить тома хранилища данных в порядке убывания free_storage. Я сохранил хранилище данных с максимальным доступным объемом памяти в переменной ds_max
. (Давайте назовем это ds_info.py)
Я хотел бы использовать ds_max
переменную from ds_info.py
в качестве аргумента командной строки для аргумента командной строки хранилища данных в clone_vm.py
.
Я попытался импортировать модуль операционной ds_info.py
системы и запустить os.system(python clone_vm.py ....arguments...)
его, но он не принимал ds_max
переменную в качестве аргумента.
Я новичок в кодировании и не уверен, что смогу изменить clone_vm.py
, чтобы использовать хранилище данных с максимальным свободным хранилищем. Спасибо, что нашли время прочитать это.
Ответ №1:
Я подозреваю, что в вашем os.system
звонке что-то не так, но вы этого не сообщаете, поэтому я не могу проверить.
Как правило, хорошей идеей является использование нынешней парадигмы, и полученная мудрость (ТМ) заключается в том, что мы используем 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 так же, как вы называли бы что-либо другое.