我需要在Python中的subprocess.Popen中运行一个shell命令。
命令是: $ virsh dumpxml server1 | grep'源文件'| awk -F \''{print $ 2}'
输出是: /vms/onion.qcow2
上面的命令我遇到了两个挑战:
1)命令在一个循环中,你看到'server1',它是一个具有服务器名称的变量。
2)Python抱怨KeyError:'print $ 2'
这是我到目前为止所做的:
proc = subprocess.Popen(["virsh dumpxml {0} | grep 'source file' | awk -F\' '{print $2}'".format(vm)], stdout=subprocess.PIPE, shell=True)
stdout = proc.communicate()[0]
提前致谢。
答案 0 :(得分:4)
虽然可以直接从python使用libvirt,但问题是{
是格式字符串,并在print $2
脚本中包围awk
,所以你必须逃避那些像
proc = subprocess.Popen(["virsh dumpxml {0} | grep 'source file' | awk -F\\' '{{print $2}}'".format(vm)], stdout=subprocess.PIPE, shell=True)
stdout = proc.communicate()[0]