如何在子进程中运行awk -F \''{print $ 2}'。Popen in Python?

Gre*_*ech 4 python shell awk subprocess python-2.7

我需要在subprocess.Popen中的Python中运行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]
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Eri*_*ouf 6

虽然可以直接从python使用libvirt,但是您的问题是{格式字符串,并且也包含print $2awk脚本中,因此您必须转义这些大括号,例如

proc = subprocess.Popen(["virsh dumpxml {0} | grep 'source file' | awk -F\\' '{{print $2}}'".format(vm)], stdout=subprocess.PIPE, shell=True)
stdout = proc.communicate()[0]
Run Code Online (Sandbox Code Playgroud)