subprocess.Popen中的变量扩展

时间:2016-01-18 23:04:47

标签: bash variables python-3.x subprocess

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

我已经看到了一些补救措施,并没有尝试过。我更好奇地发现为什么我得到这个结果而不是我期待的结果。

这是我的测试代码:

#!/usr/bin/env python3

import subprocess

iface = "en0"

iocmd = "ifconfig %s | grep netmask | awk {'print $2'}" % (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 $4\'}'], shell=True, stdout=subprocess.PIPE)

得到了同样的结果......

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

感谢您的任何意见!

克里斯

1 个答案:

答案 0 :(得分:1)

此处ipPopen个对象。它有一个stdout属性,您可以{/ 1}}来自

read()