2011-09-23 33 views
10

Tôi muốn đặt cờ tối ưu hóa (python -O myscript.py) tại thời gian chạy trong tập lệnh python dựa trên đối số dòng lệnh cho tập lệnh như myscript.py --optimize hoặc myscript --no-debug. Tôi muốn bỏ qua các tuyên bố assert mà không cần giải quyết tất cả chúng. Hoặc là có một cách tốt hơn để bỏ qua hiệu quả các phần của mã python. Có tương đương python cho #if#ifdef trong C++ không?Có thể đặt cờ python -O (tối ưu hóa) trong một tập lệnh không?

Trả lời

12

-O là cờ trình biên dịch, bạn không thể đặt cờ khi chạy vì tập lệnh đã được biên dịch rồi.

Python không có gì so sánh được với các macro trình biên dịch như #if.

Chỉ cần viết một tập lệnh start_my_project.sh đặt những cờ này.

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

Đó là vì bạn đã có đối số sai với 'os.execl()'. Đối số thứ hai là 'arg0' không phải' arg1'. Hãy thử sử dụng 'os.execl (sys.executable, sys.executable, '-O', * sys.argv)' hoặc trên thực tế khá nhiều chuỗi khác cho đối số thứ hai và nó sẽ hoạt động như bạn mong đợi. – Duncan

+0

@Duncan: Tôi đã sửa các đối số. – jfs

+0

yêu thích nó. tuyệt vời làm việc xung quanh. – hobs

Các vấn đề liên quan