2016-09-28 2 views
0

자체 내에서 파이썬 스크립트를 다시 시작하려고했습니다. 파이썬 2.7.11Python : 스크립트를 다시 시작하려고 시도하지 않았습니다.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import os 
import sys 
os.execv(__file__, sys.argv) 
sys.exit() 

결과 :

Traceback (most recent call last): 
    File "...\foo.py", line 3, in <module> 
     os.execv(__file__, sys.argv) 
OSError: [Errno 8] Exec format error 

또 다른 코드 :

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import os 
import sys 
os.execv(sys.executable, [sys.executable] + sys.argv) 
sys.exit() 

결과 :

C:\...\python.exe: can't open file 'C:\...\Math': [Errno 2] No such file or directory 

파일의 이름은 foo.py - 그것은에 있어요 폴더 이름 '수학 프로젝트'

코드 페이지 : 852, 필요한 경우.

답변

0

오류 메시지 C:\...\python.exe은 사용자가 Windows 시스템을 실행 중임을 나타냅니다.

Windows에서 os.execv()은 첫 번째 줄 (#!/usr/bin/python)이 평가되지 않았거나 대부분의 Windows 시스템에서 유효한 Python 인터프리터를 가리 키지 않기 때문에 Python 스크립트를 처리하는 방법을 모르기 때문에 첫 번째 스크립트가 실패합니다. 결과적으로 os.execv()은 파이썬 코드가 포함 된 일반 텍스트 파일을 실행하려고 시도하지만 시스템은이를 알지 못합니다.

두 번째 스크립트가 Python 스크립트 foo.py의 파일 이름을 올바르게 검색하지 못합니다. 이유는 분명하지 않지만 오류 메시지는 디렉토리 이름에 공백이있을 수 있음을 나타냅니다. Math Project.

는 가능한 해결 방법으로, 다음으로 라인

os.execv(sys.executable, [sys.executable] + sys.argv) 

를 교체하려고 :

os.execv(sys.executable, 
     [sys.executable, os.path.join(sys.path[0], __file__)] + sys.argv[1:]) 
이 줄은 파이썬 스크립트에 올바른 경로를 재구성하고, 인수로 전달하려고

파이썬 인터프리터.

참고 사항 : 스크립트가 수행중인 작업을 명심하십시오. 그것은 무조건 자체의 다른 인스턴스를 시작합니다. 결과적으로 무한 루프가 생겨 결국 시스템이 다운됩니다. 실제 스크립트에 중단 조건이 포함되어 있는지 확인하십시오.

편집 : 문제는 경로의 공간, 내가 도움이되지 않습니다 언급 한 해결 방법으로, 실제로있다

. 그러나 subprocess 모듈이이를 처리해야합니다. 이렇게 사용하십시오 :

import os 
import sys 
import subprocess 

subprocess.call(["python", os.path.join(sys.path[0], __file__)] + sys.argv[1:]) 
+0

같은 오류. C : \ ... \ python.exe : 'C : \ ... \ Math'파일을 열 수 없습니다 : [Errno 2] 해당 파일이나 디렉토리가 없습니다. –

+0

편집 된 부분이 매력처럼 작동합니다! 고맙습니다! –

관련 문제