【问题标题】:Allow Python modules to write to disk on AWS Lambda允许 Python 模块写入 AWS Lambda 上的磁盘
【发布时间】:2018-08-05 06:06:01
【问题描述】:

我在 AWS Lambda 上使用 Python 模块 googlesearch,但它抛出错误 - 我怀疑是因为它想根据 AWS Lambda 上不存在的文件夹结构将 cookie 写入磁盘。

另外,AWS Lambda 只允许写入 /tmp/

怎么办?我唯一能想到的就是从 github 下载模块代码并集成到我的 Python 脚本中——真的不想走那条路……

感谢您的建议...

这是 AWS Lambda 错误报告:

Errno 30] Read-only file system: './.google-cookie': OSError
Traceback (most recent call last):
File "/var/task/scriverto.py", line 176, in lambda_handler
url_list = generate_URL_list(query,n) #call URL generator routine in gsearch
File "/var/task/scriverto.py", line 58, in generate_URL_list
for url in search(query, tld = "co.uk", lang='en', pause = 2, stop=n): 
#can also add tld to limit to country e.g. tld='uk
File "/var/task/googlesearch/__init__.py", line 330, in search
get_page(url_home % vars())
File "/var/task/googlesearch/__init__.py", line 151, in get_page
cookie_jar.save()
File "/var/lang/lib/python3.6/http/cookiejar.py", line 1875, in save
with open(filename, "w") as f:
OSError: [Errno 30] Read-only file system: './.google-cookie'

【问题讨论】:

    标签: python python-3.x amazon-web-services aws-lambda google-search


    【解决方案1】:

    阅读source codegooglesearch 模块:

    # Cookie jar. Stored at the user's home folder.
    home_folder = os.getenv('HOME')
    if not home_folder:
        home_folder = os.getenv('USERHOME')
        if not home_folder:
            home_folder = '.'   # Use the current folder on error.
    cookie_jar = LWPCookieJar(os.path.join(home_folder, '.google-cookie'))
    try:
        cookie_jar.load()
    except Exception:
        pass
    

    看来您可以将环境变量HOMEUSERHOME 设置为/tmp,这将导致googlesearch 使用这些位置将cookiejar 写入磁盘。

    【讨论】:

    • 太棒了。谢谢马特。
    • 如何设置环境变量?当从主脚本调用模块时,我尝试将 home = '/tmp' 与其他参数(如查询、语言、TLD 等)一起包含在内,但它会引发错误。我在 github 页面上的任何地方都找不到可选参数列表。
    • docs.aws.amazon.com/lambda/latest/dg/env_variables.html 有在 AWS Lambda 中设置环境变量的说明
    • 太好了 - 谢谢马特。我将 HOME 设置为 /tmp 作为功能页面上的环境变量之一,它看起来像它工作。
    猜你喜欢
    • 2018-01-07
    • 2019-02-23
    • 2019-03-13
    • 2016-05-22
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2018-07-10
    相关资源
    最近更新 更多