gpt4 book ai didi

python - 当多个参数包含空格时如何使用子进程?

转载 作者:IT老高 更新时间:2023-10-28 20:55:49 26 4
gpt4 key购买 nike

我正在编写一个包装脚本,该脚本将运行一个 vmware 可执行文件,允许虚拟机启动/关闭/注册/注销操作的自动化。我正在尝试使用子进程来处理调用可执行文件,但是子进程未正确处理可执行文件路径和可执行文件参数中的空格。下面是一段代码:

vmrun_cmd = r"c:/Program Files/VMware/VMware Server/vmware-cmd.bat"
def vm_start(target_vm):
list_arg = "start"
list_arg2 = "hard"
if vm_list(target_vm):
p = Popen([vmrun_cmd, target_vm, list_arg, list_arg2], stdout=PIPE).communicate()[0]
print p
else:
vm_register(target_vm)
vm_start(target_vm)
def vm_list2(target_vm):
list_arg = "-l"
p = Popen([vmrun_cmd, list_arg], stdout=PIPE).communicate()[0]
for line in p.split('\n'):
print line

如果我调用 vm_list2 函数,我会得到以下输出:

$ ./vmware_control.py --list                                                
C:\Virtual Machines\QAW2K3Server\Windows Server 2003 Standard Edition.vmx
C:\Virtual Machines\ubunturouter\Ubuntu.vmx
C:\Virtual Machines\vacc\vacc.vmx
C:\Virtual Machines\EdgeAS-4.4.x\Other Linux 2.4.x kernel.vmx
C:\Virtual Machines\UbuntuServer1\Ubuntu.vmx
C:\Virtual Machines\Other Linux 2.4.x kernel\Other Linux 2.4.x kernel.vmx
C:\Virtual Machines\QAClient\Windows XP Professional.vmx

如果我调用需要路径到 vm 参数的 vm_start 函数,我会得到以下输出:

$ ./vmware_control.py --start "C:\Virtual Machines\ubunturouter\Ubuntu.vmx"
'c:\Program' is not recognized as an internal or external command,
operable program or batch file.

显然,带有嵌入空格的第二个参数的存在正在改变子进程解释第一个参数的方式。有关如何解决此问题的任何建议?

python2.5.2/cygwin/winxp

最佳答案

如果路径中有空格,我发现正确解释它们的最简单方法是这样。

subprocess.call('""' + path + '""')

我不知道为什么它需要双双引号,但这确实有效。

关于python - 当多个参数包含空格时如何使用子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/804995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com