मैं myscript.py --optimize
या myscript --no-debug
तरह स्क्रिप्ट करने के लिए एक कमांड लाइन तर्क के आधार पर एक अजगर स्क्रिप्ट के भीतर क्रम पर अनुकूलन ध्वज (python -O myscript.py
) निर्धारित करना चाहते हैं। मैं उन सभी को दूर करने के बिना assert
कथन छोड़ना चाहता हूं। या पाइथन कोड के अनुभागों को कुशलतापूर्वक अनदेखा करने का एक बेहतर तरीका है। क्या #if
और #ifdef
के लिए सी ++ में पाइथन समकक्ष हैं?क्या स्क्रिप्ट के भीतर पायथन-ओ (ऑप्टिमाइज़) ध्वज सेट करना संभव है?
10
A
उत्तर
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()
ऐसा इसलिए है क्योंकि आपको 'os.execl() 'में गलत तर्क मिलते हैं। दूसरा तर्क 'arg0'' arg1' नहीं है। 'Os.execl (sys.executable, sys.executable, '-O', * sys.argv) का उपयोग करने का प्रयास करें या वास्तव में दूसरे तर्क के लिए कोई अन्य स्ट्रिंग बहुत अधिक है और आपको उम्मीद के अनुसार काम करना चाहिए। – Duncan
@ डंकन: मैंने तर्क तय कर दिए हैं। – jfs
इसे प्यार करता हूँ। भयानक काम-आसपास। – hobs