2013-09-25 31 views
5

Đây là kịch bản của tôipython đối số dòng lệnh trong chính, bỏ qua kịch bản tên

def main(argv): 
if len(sys.argv)>1: 
    for x in sys.argv: 
     build(x) 

if __name__ == "__main__": 
    main(sys.argv) 

nên từ dòng lệnh tôi viết python myscript.py commandlineargument

Tôi muốn nó bỏ qua myscript.py và chỉ cần chạy commandlineargument qua commandlineargument(n)

vì vậy tôi hiểu rằng vòng lặp for của tôi không tính đến điều này, nhưng làm cách nào để tôi thực hiện điều đó?

+1

Nếu hàm 'main' nhận tham số' argv', có thể là _use_ tham số đó, thay vì bỏ qua nó và sử dụng 'sys.argv' thay vào đó… – abarnert

+0

Ngoài ra, bạn không cần kiểm tra' if' tại tất cả các. Nếu không có đối số, vòng lặp sẽ chạy thành công 0 lần, vì vậy hãy để nó làm như vậy. – abarnert

+0

@abarnert Tôi có một số khác – CQM

Trả lời

14

Kể từ sys.argv là một danh sách, bạn có thể sử dụng slicing sys.argv[1:]:

def main(argv): 
    for x in argv[1:]: 
     build(x) 

if __name__ == "__main__": 
    main(sys.argv) 

Nhưng, nếu bạn chỉ có thể có một tham số kịch bản, chỉ cần có được nó bằng cách chỉ số: sys.argv[1]. Tuy nhiên, bạn nên kiểm tra xem độ dài của sys.argv là hơn 1 và ném ra một lỗi nếu không, ví dụ:

def main(argv): 
    if len(argv) == 1: 
     print "Not enough arguments" 
     return 
    else: 
     build(argv[1]) 

if __name__ == "__main__": 
    main(sys.argv) 
2

Câu trả lời thực sự là để tìm hiểu và sử dụng argparse, mặc dù.

+0

Tôi đã sử dụng nó trước đây, lợi ích giữa nó và sys.argv hoặc sử dụng optparse so với cái gì khác – CQM

+0

Đó là điều để sử dụng cho phân tích cú pháp arg (trừ khi bạn cần 'vách đá). Nó có một API tuyệt vời. Nó không được dùng như 'optparse'. Nó chuẩn hóa giao diện của tập lệnh của bạn. – jhermann

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