Составление команды для управления виртуальными машинами


Я создал функцию, которая принимает некоторые входные и строит определенный набор строк. Эта функция работает, как задумано, однако я не могу не думать, насколько нелепо он выглядит каждый раз, когда я вижу его. Я изначально имела более простой способ построения строк, используя несколько различных функций, однако я не могла стоять, сколько повторений было между ними.

Это то, что в настоящее время у меня есть.

def format_command_string(vmrunDir, command, vmxfile="", username="", password="", script="", parameters=[]):
    escapedVmxfile = "\"{}\"".format(vmxfile)
    escapedVmrunDir = "\"{}\"".format(vmrunDir)
    parameters = " ".join(parameters) if parameters else " "
    subStringTuple = (
        escapedVmrunDir,  # 0
        "-T ws",  # 1
        "-gu {}".format(username),  # 2
        "-gp {}".format(password),  # 3
        command,  # 4
        escapedVmxfile,  # 5
        "cmd.exe \"/c Z:\\vm_controller_share\scripts\{}\"".format(script),  # 6
        parameters)   # 7

    formatDictionary = {
        "list": "{0} {4}",
        "runProgramInGuest": "{0} {1} {2} {3} {4} {5} {6} {7}",
        "addSharedFolder": "{0} {1} {2} {3} {4} {5} {7}",
        "removeSharedFolder": "{0} {1} {2} {3} {4} {5} {7}",
        "start": "{0} {1} {4} {5}",
        "stop": "{0} {1} {4} {5} {7}",
        "reset": "{0} {1} {4} {5} {7}"}

    formattedCommandString = formatDictionary[command].format(*subStringTuple).strip()

    return formattedCommandString

Он делает свою работу, я хочу, чтобы это делать хорошо, но это только кажется, возможно, немного... слишком сложно? Есть некоторые очевидные минусы это по читабельности и ремонтопригодности. Однако я не могу заставить себя вернуться к тому, что я изначально, что-то вроде:

def format_list_command_string(vmrunDir):
    return "{} list".format(vmrunDir)


def format_run_command_string(vmrunDir, username, password, vmxfile, script, parameters):
    return "{} -T ws -gu {} -gp {} runProgramInGuest {} cmd.exe \"/c Z:\\vm_controller_share\scripts\{} {}\"".format(vmrunDir, username, password, vmxfile, script, parameters)


def format_add_shared_folder_command_string(vmrunDir, username, password, vmxfile, guestSharedFolder, hostShareFolder):
    return "{} -T ws -gu {} -gp {} addSharedFolder {} {} {}".format(vmrunDir, username, password, vmxfile, guestSharedFolder, hostShareFolder)


def format_remove_shared_folder_command_string(vmrunDir, username, password, vmxfile, guestSharedFolder):
    return "{} -T ws -gu {} -gp {} removeSharedFolder {} {}".format(vmrunDir, username, password, vmxfile, guestSharedFolder)


def format_start_command_string(vmrunDir, vmxfile):
    return "{} -T ws start {}".format(vmrunDir, vmxfile)


def format_stop_command_string(vmrunDir, vmxfile, force):
    return "{} -T ws stop {} {}".format(vmrunDir, vmxfile, force)


def format_resetcommand_string(vmrunDir, vmxfile, force):
    return "{} -T ws reset {} {}".format(vmrunDir, vmxfile, force)

Я действительно работал в одиночку, и я не получил большое воздействие на некоторые простые вещи, как построение строк, поэтому я не уверен, что я ожидал от этого обзора, но все советы с благодарностью.

Редактировать: Пример того, как возвращенные строки будут использованы по просьбе @200_success

def try_vmrun_command(commandString):
    try:
        output = subprocess.check_output(commandString)
    except subprocess.CalledProcessError as error:
        print error.output
    else:
        return output


124
2
задан 6 марта 2018 в 11:03 Источник Поделиться
Комментарии