【问题标题】:For loop outputting one character per lineFor循环每行输出一个字符
【发布时间】: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 提供的答案

标签: python for-loop


【解决方案1】:

您得到一个字符串形式的输出,当迭代时,每次迭代产生一个字符

你应该split it by line breaks:

for each in users.splitlines():  
    print each

【讨论】:

  • 就是这样。谢谢!现在我只需要弄清楚 json 打印!干杯!我会尽可能让你回答(这让我等了 8 分钟)
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多