【发布时间】:2018-01-16 03:18:23
【问题描述】:
在 Python CGI 脚本中,我有字符串列表,它们是哈希的键:
APPENDIX_WEBSITES = ['CJSHayward']
MAIN_WEBSITES = ['Alfresco',
'Bible',
'Fathers',
'MyCollab',
'Koha',
'MediaWiki',
'Moodle',
'RequestTracker',
'SuiteCRM',
'TikiWiki',
'Wordpress']
# The variable "data" is populated with a hash containing all above entries as keys.
sys.stderr.write(repr(MAIN_WEBSITES) + '\n')
sys.stderr.write(repr(APPENDIX_WEBSITES) + '\n')
sys.stderr.write(repr(MAIN_WEBSITES + APPENDIX_WEBSITES) + '\n')
for website in MAIN_WEBSITES + APPENDIX_WEBSITES:
sys.stderr.write(website)
Apache 日志如实记录:
[2017 年 8 月 8 日星期二 16:25:34.266769] [cgi:error] [pid 16429] [client 127.0.0.1:40600] AH01215: ['Alfresco', 'Bible', 'Fathers', 'MyCollab', “Koha”、“MediaWiki”、“Moodle”、“RequestTracker”、“SuiteCRM”、“TikiWiki”、“Wordpress”]:/usr/local/websites/home/www/configure/index.cgi,引用者:http: //本地主机/ [2017 年 8 月 8 日星期二 16:25:34.267050] [cgi:error] [pid 16429] [client 127.0.0.1:40600] AH01215: ['CJSHayward']: /usr/local/websites/home/www/configure/index .cgi,引用:http://localhost/ [2017 年 8 月 8 日星期二 16:25:34.267268] [cgi:error] [pid 16429] [client 127.0.0.1:40600] AH01215: ['Alfresco', 'Bible', 'Fathers', 'MyCollab', 'Koha' ,“MediaWiki”,“Moodle”,“RequestTracker”,“SuiteCRM”,“TikiWiki”,“Wordpress”,“CJSHayward”]:/usr/local/websites/home/www/configure/index.cgi,引用者:http ://本地主机/ [Tue Aug 08 16:25:34.267490 2017] [cgi:error] [pid 16429] [client 127.0.0.1:40600] AH01215: AlfrescoAlfrescoBibleBibleFathersFathersMyCollabMyCollabKohaKohaMediaWikiMediaWikiMoodleMoodleRequestTrackerRequestTrackerSuiteCRMSuiteCRMTikiWikiTikiWiki: /usr :http://localhost/
我很惊讶它似乎在单个字符串上迭代一次(列表的冗余串联),而不是在 repr 似乎识别为字符串列表的内容上进行迭代,这正是我的意图。
如何让循环通过“CJSHayward”向上迭代“Alfresco”、“Bible”等?
【问题讨论】:
-
它确实遍历了各个网站名称。但是,您在没有任何换行符的情况下将它们写出来,因此它们都在输出时一起运行。如果您希望它们在日志中作为单独的行,请在其中添加一个换行符,就像您对前三行所做的那样。
-
sys.stderr.write(repr(MAIN_WEBSITES) + '\n')只是将列表写为附加换行符的字符串。 -
for website in MAIN_WEBSITES + APPENDIX_WEBSITES: sys.stderr.write(website)迭代连接的列表,但sys.stderr.write默认情况下不附加换行符。所以,似乎你得到了字符串的连接,但你没有。如果你想在每次调用write后换行,你必须明确:sys.stderr.write('{}\n'.format(website)) -
您忘记了循环中的
+ '\n'。投票结束是错字。 -
使用
print(<whatever>, file=sys.stderr)更轻松