2012-11-18 2 views
4

나는 스스로를 가르침으로써 Mark Luze, Oreilly가 프로그래밍 한 Python 4th Edition을 읽었습니다. 대화 형 쉘 (bash는 등) 내가 child.py를 실행하려면 파이썬 인터프리터를 물어 python child.py #args#를 입력 할 수 있습니다 알고에서execlp() in python

os.execlp('python', 'python', 'child.py', #other args#) 

: 내가 확실히 이해하지 못하는 자식 프로세스를 포크하는 방법에 대한 예제가있다 args. execlp() 함수에 두 개의 'python'이있는 이유는 무엇입니까? 함수에 하나의 파이썬 만 넣으면 파일이나 디렉토리를 찾을 수 없다는 오류가 발생합니다. 이는 첫 번째 arg args입니다.

+1

이것은'execlp' libc funciton에서 유래되었습니다.이 명령은'man execlp' 명령에 대한 더 많은 정보를 얻을 수 있습니다. – Keith

+1

다음은 POSIX 함수의 [exec family] (http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html)에 대한 Open Group 사양입니다. 유닉스에서 fork/exec의 일반적인 패턴은 40 년 동안 크게 변하지 않았습니다. – eryksun

답변

4

첫 번째 인수는 실행할 프로그램입니다 (PATH에 있음). 나머지는 프로그램에 대한 sys.argv 인수입니다.

첫 번째 인수는이를 호출하는 데 사용 된 프로그램 이름과 OS 프로세스 목록에 사용 된 표시 값입니다. 파이썬 스크립트에서는 sys.argv[0]의 값입니다.

+0

예. 알았다. 첫 번째 파이썬은 파이썬 파일 경로이고, 두 번째 파이썬은 argv [0]이며 나머지는 더 많은 args입니다. – comicosmos

+0

이것은 유감스러운 downvoted있어, 마치 [누군가 가이 대답을 오해]처럼 보입니다 (http://stackoverflow.com/questions/14174366/when-using-os-execlp-why-python-nhy-python-as-argv0 /). –

5

우선 execlp은 거의 사용되지 않습니다. 대부분의 경우,이처럼 subprocess 모듈을 사용하십시오 :

subprocess.call(['python', 'child.py']) 

execlp의 첫 번째 인수는 실행하고자하는 파일입니다.

후자의 인수는 해당 프로그램에 대한 인수 배열을 형성합니다 (Python에서는 sys.argv). 첫 번째 인수는 프로그램이 호출 된 이름입니다. 예를 들어, 프로그램이 -c 옵션으로 실행될 경우 Python은 '-c'으로 이름을 설정합니다. 마찬가지로 grep은 첫 번째 인수에 따라 다르게 동작하므로 rgrep을 실행하여 grep -r을 의미 할 수 있습니다.

+0

나는 최신판이 오래되었다고 생각하지 않을 것이다.'subprocess' 모듈이 표준 라이브러리에 포함 된 지 7 년 후에 출판되었다. 더 깊이 파고들 필요가 있다면'fork()'와'exec()'가 어떻게 작동하는지 보여줄 수 있습니다. –

+0

@DietrichEpp 네, 맞습니다. 업데이트 됨. – phihag

+0

고마워요 – comicosmos