неправильный аргумент os.execl - PullRequest
0 голосов
/ 13 мая 2018

(Слегка неработающий) код для перезапуска программы Python с использованием ее собственного интерпретатора, его аргументов и замены процесса заключается в использовании одной из функций os.exec, например os.execl.

 os.execl(path, arg0, arg1, ...)
 ...

Все эти функции выполняют новую программу, заменяя текущий процесс; они не возвращаются. В Unix новый исполняемый файл загружается в текущий процесс и будет иметь тот же идентификатор процесса, что и вызывающая программа. Ошибки будут сообщаться как исключения OSError.

Итак, я сделал это:

import os,sys

def restart_program():
    """Restarts the current program, with file objects and descriptors
       cleanup
    """
    print("restarting")
    python = sys.executable
    os.execl(python, python, *sys.argv)

restart_program()

Я получаю:

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

Ясно, что случай "чертов путь с пробелами". За исключением того, что это не должно происходить, потому что я сам не составлял командную строку, а передавал аргументы чисто.

Чтобы это работало, поскольку arg0 (обычно) игнорируется, я бы сделал (например):

os.execl(python, "python.exe", *sys.argv)

теперь программа работает.

Так баг или версия windows "фича"?

...