2011-12-13 15 views
12

मान लीजिए कि मैं http://gunicorn.org/deploy.html#runit के अनुसार बंदूक के नीचे एक फ्लास्क ऐप शुरू कर रहा हूं, क्या मेरे पास अतिरिक्त कमांड लाइन तर्कों को शामिल/पार्स/एक्सेस करने का कोई तरीका है?बंदूक के साथ अतिरिक्त कमांड लाइन तर्कों का उपयोग

उदा।, क्या मैं अपने फ्लास्क एप्लिकेशन में foo विकल्प को किसी भी तरह से शामिल और पार्स कर सकता हूं?

gunicorn mypackage:app --foo=bar 

धन्यवाद,

उत्तर

20

आप आदेश पंक्ति तर्क सीधे पारित नहीं हो सकता लेकिन आप आसानी से पर्याप्त आवेदन विन्यास चुन सकते हैं।

$ gunicorn 'mypackage:build_app(foo="bar")' 

फ़ंक्शन "build_app" को foo = "bar" kwarg को अपेक्षित रूप से गुजरने वाले फ़ंक्शन को कॉल करेगा। इस फ़ंक्शन को तब डब्लूएसजीआई कॉल करने योग्य को वापस करना चाहिए जिसका उपयोग किया जाएगा।

+0

धन्यवाद! कई तर्कों को पारित करने के लिए खोज करते समय यहां मिला। उन्हें अल्पविराम से अलग मूल्यों के रूप में पारित करने के रूप में सरल हो गया; उदाहरण के लिए '(foo =" bar ", foo1 =" bar1 ")' –

2

मैं आमतौर पर इसे में main() के बाद डालता हूं और फिर मैं बंदूक के साथ या बिना चला सकता हूं (मान लीजिए कि आपका main() अन्य कार्यों का भी समर्थन करता है)।

# __init__.py 

# Normal entry point 
def main(): 
    ... 

# Gunicorn entry point generator 
def app(*args, **kwargs): 
    # Gunicorn CLI args are useless. 
    # https://stackoverflow.com/questions/8495367/ 
    # 
    # Start the application in modified environment. 
    # https://stackoverflow.com/questions/18668947/ 
    # 
    import sys 
    sys.argv = ['--gunicorn'] 
    for k in kwargs: 
     sys.argv.append("--" + k) 
     sys.argv.append(kwargs[k]) 
    return main() 

इस तरह आप बस उदाहरण के साथ चला सकते हैं

gunicorn 'app(foo=bar)' ... 

और अपने main() मानक कोड है कि sys.argv में बहस की उम्मीद कर सकते हैं।

संबंधित मुद्दे