Python 在 Windows 重新启动的脚本
Python script that restarts itself on Windows
我正在编写一个 python 脚本来检查是否有可用的新版本,它会自行删除、复制一个新版本并使用相同的参数重新运行自己。
代码适用于 MacOs (Linux):
def main(args):
if _version.__version__ == '1.0.3':
os.remove(sys.argv[0])
shutil.copytree('/Users/john/Projects/utils/newcode/updatest/', str(script_dir), dirs_exist_ok=True)
print('Updating ...')
args.insert(0, sys.executable)
os.chdir(_startup_cwd)
print('Rerunning ...')
os.execv(sys.executable, args)
if __name__ == "__main__":
print('This is a new code!')
main(sys.argv)
在 Windows 中似乎也能正常工作,但它一直停留在 cmd 中,直到您按“Enter”。
我也尝试使用 Popen
并且它在 Windows.
上的行为相同
如何在 Windows 中正确执行?
在 Windows 中,您曾经无法删除仍处于打开状态的文件。它最近似乎发生了变化(参见 ),但如果您打算分发您的文件,我不建议您依赖它,因为它不会 运行 在旧的 Windows 10 版本上,或者非 10 Windows 版本。
假设只要你的程序是运行ning你就不能删除它自己的源文件来替换它,另一种达到相同结果的方法是间接替换文件。为此,我看到了两种方法:
- 要么使用不同的进程(其代码在另一个文件中),以便它可以替换主文件并在更新后启动它,这就是为什么许多程序都有一个与主程序不同的自动更新程序
- 或者在你的程序启动时,在检查到有新版本后,下载并用不同的名称保存,告诉用户重新启动以使用新版本(或强制退出).启动时的新版本会检查 olf 版本,如果找到,则将其删除。
根本问题是 Windows 不符合 POSIX,因此在 POSIX 系统(Lunix,MacOS,...)上工作的东西不适用于Windows.
我正在编写一个 python 脚本来检查是否有可用的新版本,它会自行删除、复制一个新版本并使用相同的参数重新运行自己。
代码适用于 MacOs (Linux):
def main(args):
if _version.__version__ == '1.0.3':
os.remove(sys.argv[0])
shutil.copytree('/Users/john/Projects/utils/newcode/updatest/', str(script_dir), dirs_exist_ok=True)
print('Updating ...')
args.insert(0, sys.executable)
os.chdir(_startup_cwd)
print('Rerunning ...')
os.execv(sys.executable, args)
if __name__ == "__main__":
print('This is a new code!')
main(sys.argv)
在 Windows 中似乎也能正常工作,但它一直停留在 cmd 中,直到您按“Enter”。
我也尝试使用 Popen
并且它在 Windows.
如何在 Windows 中正确执行?
在 Windows 中,您曾经无法删除仍处于打开状态的文件。它最近似乎发生了变化(参见
假设只要你的程序是运行ning你就不能删除它自己的源文件来替换它,另一种达到相同结果的方法是间接替换文件。为此,我看到了两种方法:
- 要么使用不同的进程(其代码在另一个文件中),以便它可以替换主文件并在更新后启动它,这就是为什么许多程序都有一个与主程序不同的自动更新程序
- 或者在你的程序启动时,在检查到有新版本后,下载并用不同的名称保存,告诉用户重新启动以使用新版本(或强制退出).启动时的新版本会检查 olf 版本,如果找到,则将其删除。
根本问题是 Windows 不符合 POSIX,因此在 POSIX 系统(Lunix,MacOS,...)上工作的东西不适用于Windows.