我想从python中执行bash命令并获取输出:
ifconfig | sed '/^$/d' | awk 'NR > 1 { print $2 }'
我已经尝试过:
p =subprocess.Popen(["ifconfig | sed '/^$/d' | awk 'NR > 1 { print $2 }'"], stdout = PIPE.)
out = p.communicate()
将流程划分为较小的流程:
p1和p2并将p1输出传递给p2,但这不起作用
我该怎么办?
答案 0 :(得分:2)
shell=True
是必要的 - 在这种情况下,您需要一个shell来评估您的命令,将其分解为单独的管道组件,然后启动它们组件。通常情况下,shell会以这种方式对字符串进行解析(您也可以将其传递给数组,但除了第一个条目之外的任何内容都只是shell的额外参数,填充$1
,{{1在作为第一个数组条目传递的脚本中的单引号外部使用时,等等:
$2
或者,为了避免需要任何shell,您可以自己连接并启动进程(这是处理不受信任的输入或安全敏感方案时的首选方法;使用shell可能会导致打开您对于Shellshock等安全漏洞:
p = subprocess.Popen("ifconfig | sed '/^$/d' | awk 'NR > 1 { print $2 }'",
shell=True, stdout=subprocess.PIPE)