2011-09-23 8 views
10

मैं myscript.py --optimize या myscript --no-debug तरह स्क्रिप्ट करने के लिए एक कमांड लाइन तर्क के आधार पर एक अजगर स्क्रिप्ट के भीतर क्रम पर अनुकूलन ध्वज (python -O myscript.py) निर्धारित करना चाहते हैं। मैं उन सभी को दूर करने के बिना assert कथन छोड़ना चाहता हूं। या पाइथन कोड के अनुभागों को कुशलतापूर्वक अनदेखा करने का एक बेहतर तरीका है। क्या #if और #ifdef के लिए सी ++ में पाइथन समकक्ष हैं?क्या स्क्रिप्ट के भीतर पायथन-ओ (ऑप्टिमाइज़) ध्वज सेट करना संभव है?

उत्तर

12

-O एक कंपाइलर ध्वज है, आप इसे रनटाइम पर सेट नहीं कर सकते हैं क्योंकि स्क्रिप्ट पहले से संकलित हो चुकी है।

पायथन के पास #if जैसे कंपाइलर मैक्रोज़ के बराबर कुछ भी नहीं है।

बस start_my_project.sh स्क्रिप्ट लिखें जो इन झंडे को सेट करता है।

6
#!/usr/bin/env python 
def main(): 
    assert 0 
    print("tada") 

if __name__=="__main__": 
    import os, sys 
    if '--optimize' in sys.argv: 
     sys.argv.remove('--optimize') 
     os.execl(sys.executable, sys.executable, '-O', *sys.argv) 
    else: 
     main() 
+2

ऐसा इसलिए है क्योंकि आपको 'os.execl() 'में गलत तर्क मिलते हैं। दूसरा तर्क 'arg0'' arg1' नहीं है। 'Os.execl (sys.executable, sys.executable, '-O', * sys.argv) का उपयोग करने का प्रयास करें या वास्तव में दूसरे तर्क के लिए कोई अन्य स्ट्रिंग बहुत अधिक है और आपको उम्मीद के अनुसार काम करना चाहिए। – Duncan

+0

@ डंकन: मैंने तर्क तय कर दिए हैं। – jfs

+0

इसे प्यार करता हूँ। भयानक काम-आसपास। – hobs

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