python3在使用gunicorn运行应用程序时打开csv文件时出错

时间:2017-11-04 03:09:59

标签: python-3.x flask gunicorn

当用gunicorn暴发户运行我的应用程序时,我得到:

TypeError: 'newline' is an invalid keyword argument for this function

但是,当我从命令行运行它时,我没有问题。

我看到过表明newline应该在文件开头的解决方案,而不是csv.writer。正如你所看到的,我确实在文件开头有它。

要重新创建:

  1. my_app.py保存到/ home / - 您的家 - /
  2. chmod u+x /home/--your home--/my_app.py
  3. my_upstart.conf保存到/ etc / init /
  4. 修改my_upstart.conf以替换您的主目录
  5. sudo service my_upstart start
  6. curl localhost:5001/vis -H"内容类型:text / csv"
  7. sudo cat /var/log/upstart/my_upstart.log
  8. my_upstart.log中,您会看到上面提到的TypeError

    my_app.py

    #!/usr/bin/python3
    from flask import Flask, request
    
    app = Flask(__name__)
    
    @app.route('/vis/', strict_slashes=False)  
    def vis():
        with (open('~/test.csv', mode='w', newline='')) as f:
            writer = csv.writer(f)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5001)
    

    my_upstart.conf

    description "Gunicorn config file for serving the Wellness app"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    respawn
    setuid ubuntu
    setgid ubuntu
    
    script
        cd /home/<your home>/
        exec gunicorn --bind 0.0.0.0:5001 my_app:app
    end script
    

2 个答案:

答案 0 :(得分:1)

比较Python版本2和3的open文档,您会注意到可以传递的参数有很多不同。特别是Python 2中没有参数newline

所以我的猜测是,当gunicorn运行时,它将获得一个版本2的Python可执行文件。

有关详细信息,请参阅Cannot get gunicorn to use Python 3

答案 1 :(得分:0)

gunicorn正在使用python 2并且它是相应的分发包,而我正在使用python 3.按照以下步骤进行修复:

  1. sudo pip3 install gunicorn
  2. /usr/bin/gunicorn中,
    • 编辑了第一行,以便阅读#!/usr/bin/python3(而不是python)和
    • 将gunicorn版本更改为与gunicorn --version所说的匹配。