如何在Python中的subprocess.Popen中运行awk -F \''{print $ 2}'?

时间:2015-08-09 02:39:55

标签: python shell python-2.7 awk subprocess

我需要在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]

提前致谢。

1 个答案:

答案 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]