我正在嘗試爲某些開源軟件編寫補丁,因爲它不會執行相當於我想 - 除了我根本不認識Python!我期望這很簡單,但它正在擊敗我。Python新手;分割字符串
背景:我寫的補丁是用於管理KVM虛擬機集羣的Ganeti,但它不支持KVM和Qemu所有可能的命令行選項,例如USB直通,所以我試圖修改它以允許這樣做。
kvm_cmd.extend()
用於添加到VM啓動時將傳遞的KVM CLI參數數組中。如果參數是空格分隔的,則每個參數變成一個單獨的字符串,例如-usb -device usb-host,hostbus=1,hostdev=14
變成"-usb", "-device", "usb-host,hostbus=1,hostdev=14"
。
我編譯代碼後,運行以下命令:
gnt-instance modify -H usb_pass="1;14"
我想這增加的命令行參數"-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])
我從上述運行上面的命令得到以下錯誤代碼:Could not start instance: Error while executing backend function: not enough arguments for format string
你怎麼能夠得到管理程序配置在python W/ instance.hvparams [constants.HV_USBPASSTHROUGH]? $ GNT實例修改--help 使用 ===== GNT實例修改 改變一個實例的參數 選項 ======= --debug,-d打開 --force調試,-f強制執行操作 --hypervisor = HYPERVISOR,-H HYPERVISOR變更管理程序參數 --backend = BEPARAMS,-B BEPARAMS更改後臺參數 --disk =磁盤的磁盤改變 - net = NICS NIC更改 --submit提交作業並返回作業ID,但不要等待e工作完成 –
damzam
如果我對Python有很多瞭解,我會遇到這個問題:)我將發佈一個答案,即USB傳遞的完整補丁,因爲現在這一切都在發揮作用,這要歸功於已發佈答案的優秀人物和女孩下面。 – jwbensley