subprocess.Popen 中的变量扩展

Variable expansion in subprocess.Popen

我正在尝试 运行 在 python 3 脚本中执行 shell 命令并使用 raw_input 获取该信息。

我已经看到了一些针对我的回答的补救措施,但还没有全部尝试过。我更好奇地想知道为什么我会得到这个结果而不是我期望的结果。

这是我的测试代码:

#!/usr/bin/env python3

import subprocess

iface = "en0"

iocmd = "ifconfig %s | grep netmask | awk {'print '}" % (iface)
ip = subprocess.Popen(iocmd , shell=True, stdout=subprocess.PIPE)

print (ip)

这很好,花花公子(我知道 shell=True 是一个安全问题,但现在我更感兴趣的是让代码正常工作),但是当我 运行 这个,而不是输出 IP,我得到:

<subprocess.Popen object at 0x1020d85f8>

我想知道为什么这是返回状态而不是命令输出?

我也试过:

ip = subprocess.Popen(['ifconfig ' + iface + ' | grep netmask | awk {\'print \'}'], shell=True, stdout=subprocess.PIPE)

得到了相同的结果...

有什么想法可以简化这个吗?我最终会转向更安全的方法,但这是我正在使用的子进程调用的唯一实例,因为我需要获取 IP 和网络掩码并希望使用本机模块。

感谢任何意见!

克里斯

这里ip是一个Popen对象。它有一个 stdout 属性,您可以从

read()
print(ip.stdout.read())