首页 > 解决方案 > 为什么保存的文件显示无,而控制台显示正确的响应?

问题描述

当我尝试将响应保存到文件时,即使实际响应显示在控制台中,它也不会保存。保存在文件中的结果为无。请参阅下面的示例

from concurrent.futures import ThreadPoolExecutor
import requests
#from timer import timer


#########  create test file

URLsTest = '''
https://en.wikipedia.org/wiki/NBA
https://en.wikipedia.org/wiki/NFL
'''.strip()

with open('input.txt', 'w') as f:
    f.write(URLsTest)
    
####################

with open('input.txt', 'r') as f:
    urls=f.read().split('\n')    # url list

def fetch(tt):  # received tuple
    session, url = tt
    print('Processing')
    with session.get(url) as response:
        print(response.text)

#@timer(1, 5)
def main():
    with ThreadPoolExecutor(max_workers=100) as executor:
        with requests.Session() as session:  # for now, just one session
            results = executor.map(fetch, [(session, u) for u in urls])  # tuple list (session, url), each tuple passed to function
            executor.shutdown(wait=True)
    # write all results to text file
    with open('output.txt', 'w') as f2:
        for r in results:  # tuple (url, html)
            f2.write("%s\n" % r)
            
main()

响应文件 - output.txt

None    
None

标签: pythontextpython-requestsoutputconcurrent.futures

解决方案


首先,您可以避免打印 html,因为您将该输出保存到文件中。这样您就可以避免使用资源来打印结果。

然后,您的 fetch 不会为results. 因此,您应该更改您的printfor a return So 而不是打印 return theresponse.text

# print(response.text)
return response.text

推荐阅读