Python新手; 拆分一个字符串

jwb*_*ley 1 python

我正在尝试为一些开源软件编写一个补丁,因为它不能完全符合我的要求 - 除了我根本不懂Python!我希望这很简单,但它打败了我.

背景:我正在编写的补丁是用于管理KVM虚拟机集群的Ganeti,但它不支持KVM和Qemu的所有可能的命令行选项,例如USB传递,所以我试图修改它以允许这个.

kvm_cmd.extend()用于添加将在VM启动时传递的KVM CLI args数组.如果参数是空格分隔的,则每个参数变为单独的字符串,例如-usb -device usb-host,hostbus=1,hostdev=14变为"-usb", "-device", "usb-host,hostbus=1,hostdev=14".

我在编译代码后运行以下命令:

gnt-instance modify -H usb_pass="1;14"
Run Code Online (Sandbox Code Playgroud)

我想将此添加到现有的命令行参数列表中"-usb -device usb-host,hostbus=1,hostdev=14".这是我添加的代码(以及在其他地方声明变量; HV_USBPASSTHROUGH是一个字符串,但这是魔术发生的地方)

usb_pass = instance.hvparams[constants.HV_USBPASSTHROUGH]
if usb_pass:
    usb_pass_arr = []
    usb_pass_arr = usb_pass.split(";")
    kvm_cmd.extend(["-usb", "-device", "usb-host,hostbus=%s,hostaddr=%s" %
                    usb_pass_arr])
Run Code Online (Sandbox Code Playgroud)

我通过上面的代码运行上面的命令得到以下错误: Could not start instance: Error while executing backend function: not enough arguments for format string

sou*_*eck 7

有两个`%s"usb-host,hostbus=%s,hostaddr=%s",但只提供一个参数,一个列表,其中一个元组的预期.

使用

"usb-host,hostbus=%s,hostaddr=%s" % tuple(usb_pass_arr)

tuple() builtin将iterable转换为元组.