【问题标题】:How to run awk -F\' '{print $2}' inside subprocess.Popen in Python?如何在 Python 中的 subprocess.Popen 中运行 awk -F\''{print $2}'?
【发布时间】:2015-11-01 05:39:06
【问题描述】:

我需要在 Python 中的 subprocess.Popen 中运行一个 shell 命令。

命令是: $ virsh dumpxml server1 | grep '源文件' | awk -F\' '{打印 $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]

提前致谢。

【问题讨论】:

标签: python shell python-2.7 awk subprocess


【解决方案1】:

虽然可以直接从 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]

【讨论】:

  • 谢谢。这是有道理的,但我仍然收到一个错误:/bin/sh: -c: line 0: unexpected EOF while looking for matching `'' /bin/sh: -c: line 1: syntax error: unexpected end of文件
  • @GreenTeaTech 没错,我已经在本地尝试中修复了这个问题,但在我的回答中忘记了(尽管我现在已经对其进行了编辑以进行修复)。问题在于 awk 中的 -F\',python 正在“吃掉” `` 所以你需要逃避它
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 2018-06-18
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
相关资源
最近更新 更多