Python 3.x 防止瓶子';s后端服务器插件(gunicorn),用于拦截命令行参数
当我运行以下代码时:Python 3.x 防止瓶子';s后端服务器插件(gunicorn),用于拦截命令行参数,python-3.x,gunicorn,bottle,Python 3.x,Gunicorn,Bottle,当我运行以下代码时: import argparse from bottle import Bottle, run app = Bottle() @app.get('/') def get_fn(): return 'Testing' def command_line(): parser = argparse.ArgumentParser() parser.add_argument('-k', '--sslkey', nargs='?', default=None,
import argparse
from bottle import Bottle, run
app = Bottle()
@app.get('/')
def get_fn():
return 'Testing'
def command_line():
parser = argparse.ArgumentParser()
parser.add_argument('-k', '--sslkey', nargs='?', default=None,
help='SSL key file')
parser.add_argument('-c', '--sslcrt', nargs='?', default=None,
help='SSL certificate file')
return parser.parse_args()
if __name__ == "__main__":
args = command_line()
run(app=app, server='gunicorn',
host='0.0.0.0', port=8888,
debug=False, quiet=True,
keyfile=args.sslkey, certfile=args.sslcrt)
我得到了无法识别的参数
错误:
python3 ./tst.py --sslcrt ''
usage: tst.py [-h] [-v] [-c CONFIG] [-b ADDRESS] [--backlog INT] [-w INT]
[-k STRING] [--threads INT] [--worker-connections INT]
[--max-requests INT] [--max-requests-jitter INT] [-t INT]
[--graceful-timeout INT] [--keep-alive INT]
[--limit-request-line INT] [--limit-request-fields INT]
[--limit-request-field_size INT] [--reload]
[--reload-engine STRING] [--reload-extra-file FILES] [--spew]
[--check-config] [--preload] [--no-sendfile] [--reuse-port]
[--chdir CHDIR] [-D] [-e ENV] [-p FILE] [--worker-tmp-dir DIR]
[-u USER] [-g GROUP] [-m INT] [--initgroups]
[--forwarded-allow-ips STRING] [--access-logfile FILE]
[--disable-redirect-access-to-syslog]
[--access-logformat STRING] [--error-logfile FILE]
[--log-level LEVEL] [--capture-output] [--logger-class STRING]
[--log-config FILE] [--log-config-dict LOGCONFIG_DICT]
[--log-syslog-to SYSLOG_ADDR] [--log-syslog]
[--log-syslog-prefix SYSLOG_PREFIX]
[--log-syslog-facility SYSLOG_FACILITY] [-R]
[--statsd-host STATSD_ADDR] [--statsd-prefix STATSD_PREFIX]
[-n STRING] [--pythonpath STRING] [--paste STRING]
[--proxy-protocol] [--proxy-allow-from PROXY_ALLOW_IPS]
[--keyfile FILE] [--certfile FILE] [--ssl-version SSL_VERSION]
[--cert-reqs CERT_REQS] [--ca-certs FILE]
[--suppress-ragged-eofs] [--do-handshake-on-connect]
[--ciphers CIPHERS] [--paste-global CONF]
tst.py: error: unrecognized arguments: --sslcrt
如果我在没有任何参数的情况下运行同一个脚本,它就可以正常工作
目前我的解决方法是在调用run()
之前重置args
:
通过此解决方案,我的脚本可以按预期工作:
python3 ./tst.py --sslcrt ''
[2019-05-01 11:01:01 +0100] [29198] [INFO] Starting gunicorn 19.9.0
[2019-05-01 11:01:01 +0100] [29198] [INFO] Listening at: http://0.0.0.0:8888 (29198)
[2019-05-01 11:01:01 +0100] [29198] [INFO] Using worker: sync
[2019-05-01 11:01:01 +0100] [29239] [INFO] Booting worker with pid: 29239
有没有更明智的方法
python3 ./tst.py --sslcrt ''
[2019-05-01 11:01:01 +0100] [29198] [INFO] Starting gunicorn 19.9.0
[2019-05-01 11:01:01 +0100] [29198] [INFO] Listening at: http://0.0.0.0:8888 (29198)
[2019-05-01 11:01:01 +0100] [29198] [INFO] Using worker: sync
[2019-05-01 11:01:01 +0100] [29239] [INFO] Booting worker with pid: 29239