我遇到了从subprocess.check_output调用打印输出的问题。 我在ip.txt中有一个IP地址列表,我从中读取并保存到列表ips。 然后我迭代该列表并调用wmic命令从该机器获取一些细节,但是只有最后一个命令打印输出。通过查看CLI输出,我可以看到为每个输出打印'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
输出
名称UserName DOMAINWS48 DOMAIN \ staff
完整
答案 0 :(得分:0)
在这些行中,您逐行读取文件:
f_in = open('ip.txt', 'r')
ips = []
for ip in f_in:
ips.append(ip)
不幸的是,每一行都有一个行尾字符仍然终止每一行。然后,您将换行符作为IP地址的一部分传递。您可能需要考虑从您阅读的每一行的末尾删除换行符\n
:
f_in = open('ip.txt', 'r')
ips = []
for ip in f_in:
ips.append(ip.strip('\n'))
strip('\n')
将从字符串的开头和结尾删除所有换行符。有关此字符串方法的信息,请参阅Python documentation:
str.strip([字符])
返回删除了前导和尾随字符的字符串副本。 chars参数是一个字符串,指定要删除的字符集。如果省略或None,则chars参数默认为删除空格。 chars参数不是前缀或后缀;相反,它的所有值组合都被剥离了:
您还可以使用以下内容读取文件中的所有行:
ips = [line.strip('\n') for line in f_in.readlines()]
我的猜测是你的ip.txt
文件在每一行都有一个IP地址,文件的最后一行没有以换行符\n
终止,在这种情况下你的代码工作正常。