如何在Heroku上执行Python脚本?

5
我有一个Python脚本,我只需要运行一次(我不想把它提交到代码库然后发送到Cedar实例)。该脚本汇总了我的Django模型数据并输出为.csv文件。通常在AWS中,我会使用scp命令将脚本复制到服务器上,使用"manage.py shell < script.py"命令运行脚本,并使用scp命令将生成的.csv文件传回到我的计算机上。我知道Heroku文件系统是短暂的,但是是否有一种方法可以在不上传到S3的情况下检索在Heroku服务器上生成的文件?这是我的最佳解决方案:
cat script.py | heroku run manage.py shell --app appname

这个脚本可以处理单行文本,但无法处理带换行的文本。

此外,上述脚本只会产生命令行输出,而不会返回 .csv 文件。

3个回答

3

我想在Heroku手动执行一次Python脚本。以下是操作方法:

  1. 在你的脚本中添加import django
  2. 在你的Python脚本中添加django.setup()这一行(这很重要,以便在Django中使用创建的模型)
  3. 在git存储库中执行shell命令:heroku run bash
  4. 在bash中输入命令:export DJANGO_SETTINGS_MODULE=projectsname.settings
  5. 在bash中输入命令:cd projectsname
  6. 在bash中输入命令:python yourscriptname.py

3

Heroku在你的dyno上不提供任何写权限(它写入的唯一文件是在推送更新时从主分支检出的文件和所有依赖项)。您将需要将输出上传到S3,保存到日志中,或找到其他传递机制(例如电子邮件)。


1
你已经接近成功了。你遇到的问题更多地与典型的shell语法相关。
你使用的是 cat script.py | heroku run manage.py shell --app appname 命令,它会将脚本作为一整段输入。
要换行,请尝试以下命令。
heroku run python -c "`cat script.py`" --app appname

关键是将反引号包裹在双引号中,这样脚本中的换行符就能被保留。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接