os.execv返回OSError:[Errno 8] Exec格式错误

时间:2018-03-06 12:13:07

标签: python python-3.x

我正在尝试让Python脚本自动下载自身的更新版本,替换现有版本,然后自动重启以便加载新版本。

我目前正在使用以下代码重新启动它:

os.execv(__file__, sys.argv)

但是,这不起作用。每当Python尝试运行此行时,它都会返回以下错误:

Traceback (most recent call last):
File "N:\CardDB\Station\Read.py", line 195, in <module>
    else:
File "N:\CardDB\Station\Read.py", line 187, in run_update
    print("\n\nWould you like to install this update?")
File "N:\CardDB\Station\Read.py", line 144, in update
    f.write(version)
OSError: [Errno 8] Exec format error

关于StackOverflow的其他问题表明它是由于缺少了shebang线,但我确保它不会丢失 - 我脚本的第一行是:

#!/usr/bin/env python3

1 个答案:

答案 0 :(得分:0)

与unix操作系统不同,Windows似乎没有对解释的可执行文件的本机支持。 os.execv需要二进制文件并失败,因为它被赋予了一个文本文件。因此,不要直接调用脚本,而是调用python解释器

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

在Linux上,如果脚本标记为可执行文件并包含一个shebang行,则可以使用os.execv(__file__, [__file__] + sys.argv)。对于不可执行的脚本,你必须像上面那样调用python可执行文件。