我正在尝试让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
答案 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可执行文件。