【发布时间】:2014-12-20 15:42:24
【问题描述】:
我在打印 subprocess.check_output 调用的输出时遇到问题。 我在 ip.txt 中有一个 IP 地址列表,我从中读取并保存到列表 ips。 然后我遍历该列表并调用 wmic 命令以从该机器获取一些详细信息,但是只有最后一个名为打印输出的命令。通过查看 CLI 输出,我可以看到每个都调用了 print 'Complete\n',但 check_output 没有返回任何输出变量。
有什么想法吗?谢谢
Python 代码:
from subprocess import check_output
f_in = open('ip.txt', 'r')
ips = []
for ip in f_in:
ips.append(ip)
f_in.close()
f_out = open('pcs.txt','w')
for ip in ips:
cmd = 'wmic /node:%s computersystem get name,username' % (ip)
f_out.write('Trying %s\n'%ip)
print 'Trying: %s' % (ip)
try:
output = check_output(cmd,shell=True)
f_out.write(output)
print 'Output\n--------\n%s' % output
print 'Complete\n'
except:
f_out.write('Could not complete wmic call... \n\n')
print 'Failed\n'
f_out.close()
文件输出:
Trying 172.16.5.133 Trying 172.16.5.135 Trying 172.16.5.98 Trying 172.16.5.131 Name UserName DOMAINWS48 DOMAIN\staff
CLI 输出
正在尝试:172.16.5.133
输出
完成
正在尝试:172.16.5.135
输出
完成
正在尝试:172.16.5.98
输出
完成
正在尝试:172.16.5.131
输出
名称用户名 DOMAINWS48 DOMAIN\员工
完成
【问题讨论】:
-
如果您直接从命令行为 172.16.5.133、172.16.5.135 和 172.16.5.98 发出 WMIC 命令,您会得到实际输出还是错误?如果您收到错误,那么该输出将转到 stderr,您需要使用
output = check_output(cmd,stderr=subprocess.STDOUT,shell=True)之类的内容来捕获它 -
如果我直接为每个 IP 发出 WMIC 命令,我会得到正确的输出。我试过在 ip.txt 中只有 2 个以上的 IP。在每种情况下,只有最后一个 IP 会打印所需的结果。此外,如果我为 WMIC 调用提供了错误的用户/通行证,则错误会显示在 CLI 输出中(仅在最后一次调用中。)
标签: python subprocess wmic