我正在尝试在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和网络掩码并希望使用本机模块。
感谢您的任何意见!
克里斯
答案 0 :(得分:1)
此处ip
是Popen
个对象。它有一个stdout
属性,您可以{/ 1}}来自
read()