使用shlex和子进程时出错

时间:2016-02-25 05:48:09

标签: python python-2.7 subprocess shlex

您好我正在尝试使用shlex拆分在python的子流程中运行此命令,但是,我还没有发现任何对此特定情况有帮助的内容:

ifconfig | grep "inet " | grep -v 127.0.0.1 | grep -v 192.* | awk '{print $2}'

我遇到ifconfig错误,因为使用单引号和双引号分割甚至$符号前的空格都不正确。 请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以使用shell=True(shell将解释|)和三重引号字符串文字(否则您需要在字符串文字内转义"'):< / p>

import subprocess
cmd = r"""ifconfig | grep "inet " | grep -v 127\.0\.0\.1 | grep -v 192\. | awk '{print $2}'"""
subprocess.call(cmd, shell=True)

或者你可以用更难的方式(Replacing shell pipeline from subprocess module documentation):

from subprocess import Popen, PIPE, call                                       

p1 = Popen(['ifconfig'], stdout=PIPE)
p2 = Popen(['grep', 'inet '], stdin=p1.stdout, stdout=PIPE)
p3 = Popen(['grep', '-v', r'127\.0\.0\.1'], stdin=p2.stdout, stdout=PIPE)
p4 = Popen(['grep', '-v', r'192\.'], stdin=p3.stdout, stdout=PIPE)
call(['awk', '{print $2}'], stdin=p4.stdout)