一般遇见想要方便管理或者集合的大脚本 我们管理很麻烦 用这个方法 无论是什么方面的脚本 都能放在一个大脚本中运行 互不干扰。
将所有功能整合到一个单一的脚本中,而不再依赖外部的.py
文件,你可以将rendering.py
和sercurity.py
中的函数代码直接复制到combined_script.py
中,并用类和静态方法来组织它们。
首先 给一个案例:
这是第一个脚本:
rendering.py:
import os
# 渲染模块的全局变量
__path__ = os.getcwd()
template_path = os.path.join(__path__, 'template')
def get_logger():
logger_path = os.path.join(template_path, 'logger.conf')
print(f"Logger path: {logger_path}")
def main():
# 使用全局变量的代码
print(f"Rendering template path: {template_path}")
get_logger()
第二个:
sercurity.py:
import os
# 安全模块的全局变量
__path__ = os.getcwd()
data_path = os.path.join(__path__, 'data')
def extract_data_from_word(docx_filename):
print(f"Extracting data from {docx_filename} to {data_path}")
def main():
# 使用全局变量的代码
print(f"Sercurity data path: {data_path}")
extract_data_from_word("example.docx")
模块
全局变量
所有函数
import os
# 定义全局变量
__path__ = os.getcwd()
template_path = os.path.join(__path__, 'template')
data_path = os.path.join(__path__, 'data')
# 假设我们将rendering.py和sercurity.py中的函数直接复制到这里
def get_logger():
logger_path = os.path.join(template_path, 'logger.conf')
print(f"Logger path: {logger_path}")
def extract_data_from_word(docx_filename):
print(f"Extracting data from {docx_filename} to {data_path}")
def rendering_main():
print("Rendering main function executed")
main() # 调用rendering模块的main函数
get_logger()
def sercurity_main():
print("Sercurity main function executed")
main() # 调用sercurity模块的main函数
extract_data_from_word("example.docx")
# 使用类和静态方法组织代码
class ModuleRunner:
@staticmethod
def run_rendering():
print("运行渲染模块")
rendering_main()
@staticmethod
def run_sercurity():
print("运行安全模块")
sercurity_main()
# 脚本入口点
if __name__ == '__main__':
# 根据命令行参数决定执行哪个模块的功能
if len(sys.argv) > 1:
module_to_run = sys.argv[1]
if module_to_run == 'rendering':
ModuleRunner.run_rendering()
elif module_to_run == 'sercurity':
ModuleRunner.run_sercurity()
else:
print(f"未知的模块指定: {module_to_run}")
print("请指定要运行的模块: 'rendering' 或 'sercurity'。")
else:
print("请指定要运行的模块: 'rendering' 或 'sercurity'。")
首先定义了所有全局变量,然后复制了rendering.py
和sercurity.py
中的函数实现。我们使用ModuleRunner
类来组织这些模块的入口点。这样,无论何时调用run_rendering
或run_sercurity
方法,它们都会使用已经定义的全局变量。
运行命令:
要点总结:
-
全局变量定义:首先定义所有需要在脚本中共享的全局变量。例如,工作目录路径和模板路径。
-
函数复制:将原脚本中定义的函数复制到新脚本中,确保所有函数都能访问到全局变量。
-
避免命名冲突:如果不同脚本中有同名函数,需要重命名以避免冲突。
-
组织代码:使用类和静态方法来组织不同模块的代码。每个模块的功能封装在对应的类方法中。
-
入口点控制:在脚本底部使用
if __name__ == '__main__':
来控制脚本的入口点,根据命令行参数决定执行哪个模块的功能。 -
删除原脚本的入口点:在整合代码时,删除原脚本中的
if __name__ == '__main__':
块,以防止在导入模块时执行代码。 -
提供清晰的用户指导:在脚本的入口点提供清晰的中文提示信息,指导用户如何通过命令行参数选择要执行的模块。
-
测试:在整合后,对每个模块的功能进行测试,确保它们在新环境中正常工作。
-
文档化:更新代码的注释和文档,说明整合后的脚本如何工作,以及如何使用命令行参数。
-
持续迭代:根据反馈和测试结果,持续优化和迭代代码,提高其健壮性和用户友好性。