如何在Python 3中进行软重启而不退出Python?

时间:2018-08-31 15:23:44

标签: python python-3.x shell cross-platform restart

我正在开发Python 3脚本,以完成以前使用Windows Batch和/或GNU / Linux Shell脚本完成的工作。主要原因是我的组织同时使用Windows和GNU / Linux,并且我们想要一个可以在两个平台上都可以操作的脚本(理论上更易于维护)。

我的shell脚本将简化为

python name-of-python-script.py

我相信,如果我可以在单个Python会话中进行软重启,则可以简化当前的任务。 (我的平台相关脚本调用了一系列独立的Python实例,每个实例都有自己的导入,对象创建等。不保持Python会话独立可能会导致名称冲突。)

Python脚本的一种解决方案是:

# Beginning of Python Script
DIR = set(dir()).union({'DIR'}) # Remember what's in start-up scope
# Create a bunch of objects, do a bunch of function calls, etc. (#1)
exec('del ' + ', '.join(filter(lambda s: s not in DIR, dir()))) # Soft restart (#2)
# Alternate between #1 and #2

我目前的解决方案是:

restore = \
'''
for name in dir():
    part = name.partition('__')
    if name in ('restore', 'name', 'part'):
        pass # name is being used in-loop: don't delete
    elif part[0]: # name does not begin with '__'
        exec('del ' + name)
    elif part[1] == '__': # name begins with '__'
        part = ''.join(reversed(part[2])).partition('__')
        if part[0]: # name does not end with '__'
            exec('del ' + name)
    else:
        pass

del name, part
'''
# usage: exec(restore)

什么是更优雅的解决方案?具体来说,对于第一种解决方案,我希望避免每次我要进行软重启时都必须逐字复制#2。两种解决方案都需要exec,这是可以避免的。

我确认到目前为止的反馈(2018-12-08);仍然在做一个最小的例子。

0 个答案:

没有答案