在我用python编写的程序中,如果变量变为true,我需要完全重新启动程序,查找一段时间后,我发现以下命令:

while True:
    if reboot == True:
        os.execv(sys.argv[0], sys.argv)

执行时,返回错误[Errno 8] Exec format error.我在os.execv上搜索了进一步的文档,但没有找到任何相关的内容,所以我的问题是,是否有人知道我做错了什么,或者知道更好的方法来重新启动脚本(重新启动意味着完全重新运行脚本,就像它是第一次打开一样,所以所有未分配的变量都没有线程运行).

推荐答案

实现同一目标有多种方法.首先修改程序,使其在标志变为True时退出.还有各种各样的 Select ,每种都有其优缺点.

Wrap it using a bash script.

脚本应该处理退出并重新启动程序.真正基本的版本可能是:

#!/bin/bash
while :
do
    python program.py
    sleep 1
done

Start the program as a sub-process of another program.

首先,将程序代码包装到函数中.那么你的__main__可能是这样的:

def program():
  ### Here is the code of your program
  ...

while True:
  from multiprocessing import Process
  process = Process(target=program)
  process.start()
  process.join()
  print("Restarting...")

这段代码相对来说比较基础,需要实现错误处理.

Use a process manager

有许多可用的工具可以监视流程、并行运行多个流程以及自动重新启动已停止的流程.值得一看PM2个或类似的数字.

第三个选项(process manager)看起来是最安全的方法.其他方法将有边缘情况,需要您的实施来处理边缘情况.

Python相关问答推荐

有症状地 destruct 了Python中的regex?

什么相当于pytorch中的numpy累积ufunc

将图像拖到另一个图像

如何在Python中并行化以下搜索?

如何在Raspberry Pi上检测USB并使用Python访问它?

运输问题分支定界法&

如何设置视频语言时上传到YouTube与Python API客户端

如何在Polars中从列表中的所有 struct 中 Select 字段?

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

判断solve_ivp中的事件

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

如何在Quarto中的标题页之前创建序言页

为什么在不先将包作为模块导入的情况下相对导入不起作用

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?

如何更改网络中某条边的位置(&Q;)?

在被零整除的情况下,Python不遵循IEEE-754吗?