2010-11-15 39 views
14

tôi có thể gọi kịch bản của tôi như thế này:Cách kiểm tra xem một đối số từ dòng lệnh đã được đặt chưa?

python D:\myscript.py 60 

Và trong kịch bản tôi có thể làm:

arg = sys.argv[1] 
foo(arg) 

Nhưng làm thế nào tôi có thể kiểm tra nếu đối số đã được nhập trong các cuộc gọi dòng lệnh? Tôi cần phải làm một cái gì đó như thế này:

if isset(sys.argv[1]): 
    foo(sys.argv[1]) 
else: 
    print "You must set argument!!!" 
+0

kiểm tra nếu argv [1] là null, xin lỗi tôi nghĩ rằng nó là ngầm rằng tôi đã nói về lý luận 1. – Jim

+1

@ Jim 'sys.argv' không phải là null, nó chứa ít nhất tên của tập lệnh là' sys.argv [0] ' – khachik

Trả lời

31

Không sử dụng sys.argv để xử lý giao diện dòng lệnh; có một mô-đun để làm điều đó: argparse.

Bạn có thể đánh dấu đối số theo yêu cầu bằng cách đi qua required=True đến add_argument.

import argparse 
parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("foo", ..., required=True) 
parser.parse_args() 
+6

+1 vì argparse là tuyệt vời. – GWW

+3

Nếu nhu cầu rất đơn giản, có thực sự một cái gì đó * sai * với việc sử dụng 'sys.argv'? – Jonik

+0

giải pháp tốt cho vấn đề này! – Jim

-7

if(sys.argv[1]): nên hoạt động tốt, nếu không có lý lẽ sys.argv [1] sẽ được (nên) null

+0

Điều đó sẽ đưa ra một chỉ mục danh sách ngoài lỗi nếu giá trị đó không được thiết lập. – GWW

+0

Nó sẽ rơi xuống với 'IndexError' – khachik

+4

Không có điều đó sẽ không hoạt động, vì chỉ mục nằm ngoài phạm vi. –

19
if len(sys.argv) < 2: 
    print "You must set argument!!!" 
5

Nếu bạn đang sử dụng Python 2.7/3.2, hãy sử dụng mô-đun argparse. Nếu không, hãy sử dụng mô-đun optparse. Mô-đun này sẽ xử lý việc phân tích cú pháp dòng lệnh và bạn có thể kiểm tra xem số đối số vị trí có khớp với những gì bạn mong đợi hay không.

0

tôi sử dụng optparse module cho điều này nhưng tôi đoán vì tôi đang sử dụng 2,5 bạn có thể sử dụng argparse như Alex gợi ý nếu bạn đang sử dụng 2,7 hoặc cao hơn

0
for arg in sys.argv: 
    print (arg) 
    #print cli arguments 

Bạn có thể sử dụng nó để lưu trữ các tham số trong danh sách và sử dụng chúng. Là cách an toàn hơn để sử dụng chúng như thế này sys.argv[n]

Không có vấn đề nếu không có đối số được cho

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