我正在开发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);仍然在做一个最小的例子。