2014-01-10 3 views
2

sys에서 arugments 전달에 대한 빠른 질문. 아래 코드에서 data_dir = "을 이해하지 못합니다." 이 data_dir은 다른 섹션에서 파일 디렉토리를 나타내는 데 사용되지만 "=". 조각. 나는 sys.argv가 main이라는 함수에서 사용할 수있는 파일명 인 arugment만을 전달할 것이라고 생각했다. 어떤 도움을 주시면 감사하겠습니다!python에서 sys.argv의 디렉토리 이름 전달

def main(name, data_dir ="."): 
    resp = Respondents() 
    resp.ReadRecords(data_dir) 
    print 'Number of respondents', len(resp.records) 

    preg = Pregnancies() 
    preg.ReadRecords(data_dir) 
    print 'Number of pregnancies', len(preg.records) 

if __name__ == '__main__': 
    main(*sys.argv) 
+0

'.' === 현재 작업 디렉토리. – devnull

+1

''. "은 현재 디렉토리 (리눅스 개념)를 참조하고 부모 디렉토리는''''''를 사용합니다. 당신의 시스템에서'cd .'와'cd ..'를 시도하십시오. –

+0

@GrijeshChauhan Win & Mac에서도'.'과'..'를 사용할 수 있다고 생각했습니다. – devnull

답변

1

* before sys.argv는 목록이 함수의 모든 인수로 확장되도록합니다. 따라서 sys.argv [0]이 name에 전달되고 sys.argv [1]이 data_dir로 전달되어 "."을 재정의합니다.

0

희망이 예제는 how * sys.argv의 이해를 돕습니다. data_dir = "." main() 함수의 매개 변수는 실제로 기본 매개 변수입니다. 즉, data_dir에 값을 전달하지 않으면 파이썬은 해당 값을 "." UNIX의 현재 디렉토리를 나타냅니다.

>>> 
>>> def main(name, data_dir = "."): 
...  print name 
...  print data_dir 
... 
>>> import sys 
>>> sys.argv 
[''] 
>>> sys.argv[0] = "some_file_name" 
>>> 
>>> main(*sys.argv) 
some_file_name 
. 
>>> 
>>> sys.argv.append("my_data_dir") 
>>> main(*sys.argv) 
some_file_name 
my_data_dir 
>>> 
+0

고마워요! 매우 도움이되는 설명! 알았어. – user3180797

0

"." data_dir의 defaut 값인 경우 프로그램이 실행되는 현재 디렉토리를 의미합니다.