2010-08-01 6 views
5

os.execv를 사용하여 현재 프로세스를 새 프로세스로 바꾸려면 아무런 인수가 없으면 정상적으로 작동합니다.args 인수가없는 os.execv

시작하려는 프로세스로 전달할 인수가 없어도 어떻게 호출 할 수 있습니까?

# Works fine, unless the arguments tuple wouldn't exist or be empty 
os.execv('process.exe', ('arg1', 'arg2')) 

답변

6

좋아, IRC에 요구 후 그들이 그것을 이런 식으로 작동하는 이유를 지적하려고합니다.

첫 번째 인수 (arg0)는 일반적으로 실행중인 파일 이름 (예 : sys.argv [0])이므로 첫 번째 인수는 항상 파일 이름이어야합니다.

이것은 인수가 선택 사항이 아닌 이유를 설명합니다. IRC에서 arg0은 응용 프로그램의 이름이 무엇인지 생각한다고 말합니다. 보통 인수 목록 (sys.argv에)의 첫 번째 매개 변수는 응용 프로그램을 호출하는 데 사용 된 명령입니다

cmd = '/usr/bin/vi' 
os.execv(cmd, ('',)) 
os.execv(cmd, ['']) 
os.execl(cmd, '') 

:

1

os.execv('process',()) 

당신에게 인수없이 확인하십시오 process 일입니다 나를 위해 작동?

또는 execl 함수는

os.execl('process') 
+0

는, 그것의

: 는 그래서 그 중 하나를 사용하는 것이 좋습니다 py2exe 패키지. –

+0

2.5가 사용 중이므로 문제가 될 수 있습니다. execl()을 사용해 보셨습니까? –

+0

execl이 막후에서 execv를 사용하고있는 것 같습니다 : http://pastebin.com/W1YKpxe7 –

5

이 세 가지 변형은 문제를 해결할 수 있습니다.

cmd = '/usr/bin/vi' 
os.execv(cmd, (cmd,)) 
os.execv(cmd, [cmd]) 
os.execl(cmd, cmd) 
os.exec* documentation on python.org는 튜플 (파이썬 2.7에서) 나를 위해 비어 있음 오류를주고, 그래 난이 인수없이 작동 알 수
+1

이것은 정답입니다. 인덱스 0의 인수는 프로그램의 이름입니다. –

관련 문제