【发布时间】:2016-01-23 08:34:01
【问题描述】:
我正在编写一个快速的 python 脚本包装器来查询我们的崩溃计划服务器,这样我就可以从多个站点收集数据,然后将其转换为 json 进行迁移,我已经完成了大部分工作。这可能有点难看,但我离获取需要传递给 json 模块的数据只有一步之遥,这样我就可以格式化报告所需的数据。
脚本应该查询 ldap,从站点列表中获取名称列表,然后创建一个命令(有效)。
但是在 for 循环中打印列表时,它会打印出每个字符,而不是每个名称。如果我只是打印列表,它会在一行上打印出每个名称。由于用户名不正确,这显然会破坏 REST 调用。
'''
Crashplan query script
Queries the crashplan server using subprocess calls and formats the output
'''
import subprocess
import json
password = raw_input("What password do you want to use: ")
sitelist = ['US - DC - Washington', 'US - FL - Miami', 'US - GA - Atlanta', 'CA - Toronto']
cmdsites = ""
for each in sitelist:
cmdsites = cmdsites + '(OfficeLocation={})'.format(each)
ldap_cmd = "ldapsearch -xLLL -S OfficeLocation -h ldap.local.x.com -b cn=users,dc=x,dc=com '(&(!(gidNumber=1088))(|%s))' | grep -w 'uid:' | awk {'print $2'}" % cmdsites
users = subprocess.check_output([ldap_cmd], shell=True)
##### EVERYTHING WORKS UP TO THIS POINT #####
for each in users:
# subprocess.call(['curl -X GET -k -u "admin:'+password+'" "https://crashplan.x.com:4285/api/User?username='+each+'@x.com&incBackupUsage=true&strKey=lastBackup"'], shell=True) ### THIS COMMAND WORKS IT JUST GETS PASSED THE WRONG USERNAME
print each #### THIS PRINTS OUT ONE LETTER PER LINE ####
print type(users) #### THIS PRINTS OUT ONE NAME PER LINE ####
【问题讨论】:
-
看,
users是一个字符串,所以如果你在它上面循环,你每次都会得到一个字母。而是split字符串然后运行循环 -
糟糕。仅供参考,最后一行是我的测试。它应该是 print (users) 。我试图查看传递的类型。
-
我说的不是线路,而是循环。
each变量将只接收一个字母和一些空格,因为您正在循环字符串。试试@alecxe 提供的答案