2012-12-02 6 views
14

두 번째 줄의 "script"부분에서 "Python을 힘들게 배우십시오"라는 말을 읽었습니다. 내가 이해에서from sys import argv - "script"의 기능은 무엇입니까?

from sys import argv 
script, filename = argv 

는 두 번째 줄은 말한다 : scriptfilenameargv을 포함한다. "스크립트"부분없이 코드를 실행 해 보았지만 정상적으로 작동했습니다. 나는 그 목적이 무엇인지 잘 모릅니다. argv에서

+0

사실 저는'sys에서'첫 줄을 이해하지 못합니다. 누군가 나에게 설명해 줄 수 있니? 나는 Python을 처음 사용한다. –

+0

실제로'script'가없는 코드를 실행하면 오류가 발생합니다 ** TypeError : 유니 코드로 강제 변환 : 필요 문자열 또는 버퍼가 필요합니다 ** –

답변

13

일반적으로, 명령 줄 실행 파일에 대한 첫 번째 인수는 스크립트 이름이고, 나머지는 예상 인수입니다. 스크립트 이름과 인수 : 여기

, argv 두 값을 포함 할 것으로 예상된다 목록입니다. 또한 오류를 던지는 동안 (1 년 또는 3 등) 인수의 예기치 않은 숫자가있는 경우 파이썬의 포장을 풀고 표기법을 사용하면

script = argv[0] 
filename = argv[1] 

script, filename = argv 

를 작성할 수 있습니다. 예기치 않은 인수가 없기 때문에 이것은 코드에 따라 좋은 생각 일 수 있습니다.

그러나, 다음 코드는 filename 실제로 파일 이름을 포함하는 발생하지 않습니다

filename = argv 

filename 이제 인수 목록이기 때문입니다. 설명하기 :

script, filename = argv 
print("Script:", script) # Prints script name 
print("Filename:", filename) # Prints the first argument 

filename = argv 
print("Filname:", filename) # Prints something like ["my-script.py", "my-file.txt"] 
2

첫 번째 항목은 실행중인 파이썬 스크립트의 이름입니다. 추가 인수 (이 경우 파일 이름)는이 스크립트로 전달되는 인수입니다.

이 두 인수

는 이름 scriptfilename 할당됩니다. script이 결코 다시 사용되지 않을 수도 있습니다. 그것은 기본적으로 자리 표시 자입니다. 그러나 제거 할 경우 filename = argv[1] 대신 사용하십시오.

4

기타 script 무엇인지 설명했지만, 파이썬 문은 unpacking이라고하며 일반적으로 튜플 또는 시퀀스에 적용됩니다.

= 부호의 오른쪽에있는 튜플 (또는 시퀀스)에있는 각 값에 대한 변수를 지정하는 단축키 방법입니다.

그것은 argv 특정 일이 아니다 : 명심해야 할

>>> a,b = ('Hello','World') 
>>> a 
'Hello' 
>>> b 
'World' 

것은 왼쪽에있는 변수의 수는 당신에게 다른, 오른쪽의 순서로 항목의 수와 일치해야한다는 것입니다 얻으십시오 :

>>> a,b,c = ('Hello','World') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 2 values to unpack 
>>> a,b = ('Hello','World','!') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 
2

argv은 프로그램에 대한 인수 목록입니다. 표준 셸 동작에는 프로그램 자체의 이름이 argv의 첫 번째 인수로 포함됩니다.

왼쪽에있는 변수의 수가 오른쪽에있는 목록의 크기와 같으면 Python에서 여러 값을 동시에 할당 할 수 있습니다 (더 많은 경우를 처리 할 수 ​​있지만 가장 기본적인 것입니다). 예 :

script, filename = argv 

는 정확히 두 개의 요소가없는 ValueErrorargv 경우 해당 스크립트가 올릴 것 또한

script = argv[0] 
filename = argv[1] 

주와 동일합니다.