如何运行awk-F\&x27';{打印$2}';Python中的subprocess.Popen内部?
我需要在Python的subprocess.Popen中运行一个shell命令 命令是: $virsh dumpxml server1 | grep'源文件| awk-F\''{print$2}' 输出为: /vms/onion.qcow2 我对上述命令有两个挑战: 1) 该命令位于一个循环中,在“server1”中,它是一个具有服务器名称的变量 2) Python正在抱怨KeyError:“print$2” 以下是我到目前为止的情况:如何运行awk-F\&x27';{打印$2}';Python中的subprocess.Popen内部?,python,shell,python-2.7,awk,subprocess,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(["vir
proc = subprocess.Popen(["virsh dumpxml {0} | grep 'source file' | awk -F\' '{print $2}'".format(vm)], stdout=subprocess.PIPE, shell=True)
stdout = proc.communicate()[0]
提前感谢。虽然可以直接从python使用libvirt,但您的问题是,
{
是格式字符串,并且在awk
脚本中围绕着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]
您是否考虑过使用直接访问libvirt内容?谢谢。这是有道理的,但我仍然会遇到一个错误:/bin/sh:-c:0行:在查找匹配的`''/bin/sh:-c:1行:语法错误:意外结束file@GreenTeaTech你说得对,我在本地尝试时已经解决了这个问题,但在我的回答中忘记了(虽然我现在已经编辑了它以进行修复)。问题在于awk中的
-F\'
,python正在“吃”这个``所以你需要逃避它