【实测】django平台启动某脚本时的引入问题 (一期自动化平台的同学必看!)

简介: 【实测】django平台启动某脚本时的引入问题 (一期自动化平台的同学必看!)

前言:这是一个基础,a文件引入b模块的文件,在python中再简单不过。但是在django平台上去执行这个文件的时候,就会莫名的报错找不到b模块文件。这种问题在一些特殊需求的时候是属于一种疑难杂症的。


本篇文章,就来给大家好好研究和解决一下这个问题。


先来看demo:

【DEMO: 正常无django导入】

文件结构:

640.png


a.py:

640.png


b.py:

640.png


在a文件位置运行a文件:

640.png


可以看到是成功导入的。


然后我们换个执行位置,再运行a文件试试:

640.png


可以看到仍然是成功导入的。


【DEMO: django项目内】

然后我们引入django平台试试,文件目录如下:

640.png


注意,此时的a文件和b文件的位置已经比较复杂了。

然后我们先手动在终端运行a文件来测试(需要采用不同写法导入b):

  1.  

在a文件位置运行a:

640.png


如上图所示,此刻需要用sys.path.append方法临时添加上级目录,才能正常导入,其他写法全部报错。


2. 在其他位置运行a:

640.png


如图所示,用sys的方案依然可以成功导入,其他写法基本全会报错。


3. pycharm启动平台,从平台上接口触发的方式,调用subprocess.call方法来使用新进程执行a文件:

640.png

640.png


如图所示,只有这种写法可以成功导入。


4. 在终端上启动django平台,然后再次用接口触发新进程的方式执行a:

640.png


如图,依然可以成功导入。


从这里我们可以得出结论,平台执行 等价于 于在django根目录下使用python命令直接执行。因为manage.py的位置也就是根目录,是django默认命令寻址的初始地。


那么现在问题来了,a脚本的单独本地执行也就是在a文件位置上执行。和平台执行 这俩种情况,能不能让代码不变的方式同时满足呢???


毕竟我们假设a.py文件 就是 自动化脚本,它既需要本地调试,又需要在平台上接口触发的方式执行。


好,公布答案:

640.png


这样的写法就可以同时让a.py成功导入b的内容了。


然后我们进阶一下,复杂化一点目录层级:(和培训版本自动化测试平台同样目录设计了)

640.png


结果:平台调用成功

640.png


本地调试成功:

640.png


可以看到,这样的方案,仍然成功导入了。


然后我们就要再复杂一点:(和培训版本自动化测试平台的动态目录一致了)

注意,因为client_50这个50并不确定,所以要做成动态获取:


并且我还打印了下这个 __file__  大家可以来直观的看到这个__file__是个什么东西。(用re正则来获取这个50,比用split切片要靠谱)

640.png


import sys,re
print(str(__file__))
try:
    sys.path.append( 'MyClient/client_%s'% re.findall(r'client_(.\d?)', str(__file__))[0] )
except:
    sys.path.append('..')
from public.b import b
b()


结果如下:

平台调用:

640.png


本地调试:

640.png


如图所示,两种情况均已成功导入。

大家也明白了,两种情况下,__file__的值并不相同,所以要用一个try/except的写法。


欢迎关注:测试开发干货

进群加v:qingwanjianhua

相关文章
|
5天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
23 2
|
7天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
19 3
|
13天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
14天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
18天前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
17 3
|
19天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
24 1
|
1月前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。
|
1月前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
30天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
26 0
|
1月前
|
Web App开发 安全 Java
网页内容获取:Scala自动化脚本的实现
网页内容获取:Scala自动化脚本的实现