关闭Python脚本,然后立即重新启动

2024-09-30 23:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python(Vizard)在笔记本电脑上远程启动虚拟现实环境。我需要远程操作,因为笔记本电脑是关闭的,用户也戴着头戴式显示器,把它放在背包里。我可以打开网络连接并发送命令,使虚拟现实环境加载到笔记本电脑上,但如果不完全关闭Vizard,我无法关闭环境。在

为了启动,我添加了一个网络,如下所示:

myNetwork = viz.addNetwork('computer_name')

然后使用网络事件回调等待网络消息:

def onNetwork(e):
    loadWorld(e.preferences)

viz.callback(viz.NETWORK_EVENT, onNetwork)

def loadWorld(preferences):
    <<...>>

因此,这很好地工作,并且使用preferences中指定的首选项将播放器引导到虚拟现实环境中。但如果我在网络上再发一条信息,新世界就叠加在旧世界之上,似乎没有一种有效的方法可以整齐地关闭虚拟现实环境。在

因为我无法以一种像样的方式解构虚拟现实环境,所以从一开始就重新启动整个程序似乎更好。Vizard中有一个命令,viz.quit(),但是如果我在loadWorld函数调用之前插入这个命令,程序将完全停止运行,并且永远不会到达loadWorld。所以,我想知道是否有另一种方法可以做到这一点:关闭程序,但让整个脚本循环运行,这样当程序关闭时,它会立即重新启动。在

问题是:如何告诉Python脚本关闭并释放所有资源,然后在之后立即重新启动自己?在


Tags: 方法命令程序网络脚本远程环境def
2条回答

上面的答案不会关闭打开的文件对象和描述符,请参见os.execv(),因此应该在执行os.execv()之前进行清理,正如python文档中所述,可以使用sys.stdout.flush()或{}刷新打开的文件对象和描述符。在

不确定vizard,但如果您只需要重新启动脚本,这是一种方法。在

import os, sys

#stuff

def restart():
    args = sys.argv[:]  # get shallow copy of running script args
    args.insert(0, sys.executable)  # give it the executable
    os.execv(sys.executable, args)  # execute the script with current args, effectively relaunching it, can modify args above to change how it relaunches

调用restart()将使用相同的参数重新启动脚本。在

我可以确认,对于一个普通的老python脚本,在一个有可执行权限的*nix环境中,它的头部有一个shebang,希望这能帮助您解决vizard问题

相关问题 更多 >