2016-09-28 3 views
0

Пытался перезапустить скрипт python внутри себя. Python 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 - это в имя папки «Math Project»

Codepage: 852, при необходимости.

ответ

0

Ваше сообщение об ошибке C:\...\python.exe предполагает, что вы используете систему Windows.

Ошибка вашего первого скрипта, поскольку в Windows os.execv() не знает, как обрабатывать скрипты Python, поскольку первая строка (#!/usr/bin/python) не оценивается и не указывает на действительный интерпретатор Python для большинства систем Windows. Фактически, os.execv() пытается выполнить простой текстовый файл, который содержит код Python, но система этого не знает.

Ваш второй скрипт не может правильно получить имя файла вашего сценария 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:]) 

Эта линия пытается восстановить правильный путь к сценарию Python, и передать его в качестве аргумента интерпретатору Python.

В качестве примечания: Имейте в виду, что делает ваш скрипт: он безоговорочно запускает другой экземпляр сам по себе. Это приведет к бесконечному циклу, который в конечном итоге приведет к снижению вашей системы. Убедитесь, что ваш реальный скрипт содержит условие прерывания.

EDIT:

Проблема заключается, в самом деле, с пространством в пути, и обходной путь, который я упомянул, не поможет. Однако модуль 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

Отредактированная часть работает как шарм! Спасибо! –

Смежные вопросы