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())
我正在尝试 运行 在 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())