重新执行上的Python对象持久性

重新执行上的Python对象持久性,python,process,exec,Python,Process,Exec,何处是在运行脚本的重新执行上持久化对象的方法?如果我想让一个正在运行的脚本重新执行它自己以获取任何代码更改,(os.exec*)有没有办法在重新执行后保存对象以供访问?我可以用经过pickle处理的ascii数据设置环境变量,或者将数据写入管道,并在重新执行后重新读取,但这似乎不雅观,或者像是一种黑客行为。即使这样做,也不是所有的东西都能腌制好 签出搁置 import shelve db = shelve.open("database", "c") db["one"] = 1 db["two"

何处是在运行脚本的重新执行上持久化对象的方法?如果我想让一个正在运行的脚本重新执行它自己以获取任何代码更改,(os.exec*)有没有办法在重新执行后保存对象以供访问?我可以用经过pickle处理的ascii数据设置环境变量,或者将数据写入管道,并在重新执行后重新读取,但这似乎不雅观,或者像是一种黑客行为。即使这样做,也不是所有的东西都能腌制好

签出
搁置

import shelve

db = shelve.open("database", "c")
db["one"] = 1
db["two"] = 2
db["three"] = 3
db.close()

查看
搁置

import shelve

db = shelve.open("database", "c")
db["one"] = 1
db["two"] = 2
db["three"] = 3
db.close()

如果将代码放入模块中,则可以使用标准函数加载新版本的代码。您的主模块可能如下所示:

import mymodule

while mymodule.go():
    reload(mymodule)

每当您想重新加载模块代码时,请从
go()
返回
True
。要退出时,返回
False

如果将代码放入模块中,则可以使用标准函数加载新版本的代码。您的主模块可能如下所示:

import mymodule

while mymodule.go():
    reload(mymodule)

每当您想重新加载模块代码时,请从
go()
返回
True
。当您想退出时,返回
False

您所说的“重新执行”是什么意思?您的脚本是否被用户在同一会话中终止并再次运行?或者你的脚本使用os.exec()调用自己?@boaz脚本使用os.exec调用自己那么这对我来说似乎是个坏主意,除非你想并行运行多个进程(但是你不想持久化)。Python有很多用于运行Python代码的工具,所以您不需要对Python脚本使用os.exec()。你看过格雷格的解决方案了吗?格雷格的解决方案是我现在计划实施的方式。此进程将是嵌入式linux系统上的init进程,因此重新读取init代码的唯一其他选项是重新启动。这不是不可接受的,因为代码更改不应该在开发后随init更改。我只是想模仿Sysvinit你说的“执行”是什么意思?您的脚本是否被用户在同一会话中终止并再次运行?或者你的脚本使用os.exec()调用自己?@boaz脚本使用os.exec调用自己那么这对我来说似乎是个坏主意,除非你想并行运行多个进程(但是你不想持久化)。Python有很多用于运行Python代码的工具,所以您不需要对Python脚本使用os.exec()。你看过格雷格的解决方案了吗?格雷格的解决方案是我现在计划实施的方式。此进程将是嵌入式linux系统上的init进程,因此重新读取init代码的唯一其他选项是重新启动。这不是不可接受的,因为代码更改不应该在开发后随init更改。我只是想模仿Sysviniti如果我能成功,我不想担心我要保存的对象以及它们是否会按预期进行pickle。如果我能成功,我不想担心我要保存的对象以及它们是否会按预期进行pickle。