【实测】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

相关文章
|
4天前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
10 3
|
6天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
12 1
|
22天前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。
|
21天前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
29天前
|
XML 前端开发 数据格式
Ruby脚本:自动化网页图像下载的实践案例
Ruby脚本:自动化网页图像下载的实践案例
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
37 2
|
1月前
|
运维 Devops jenkins
自动化运维之路:从脚本到DevOps
【9月更文挑战第31天】在数字化时代的浪潮中,运维不再是单纯的系统维护,而是企业竞争力的加速器。本文将带你领略自动化运维的演变历程,从最初的脚本编写到现代DevOps实践的转变,揭示如何通过持续集成和持续交付(CI/CD)实现运维的高效与创新。我们将一起探索工具的选择、流程的优化以及文化的培养,让运维工作变得既简单又强大。
|
2月前
|
运维 监控 jenkins
自动化运维之路:从脚本到工具的演变
【9月更文挑战第29天】在数字化浪潮中,运维不再是简单的服务器管理。本文将带您穿越自动化运维的发展历程,揭示如何通过技术革新提升效率与可靠性。我们将探索自动化工具如何解放双手,实现快速部署、监控和故障恢复,最终达到高效运维的目标。
|
17天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
17 0
|
25天前
|
Web App开发 安全 Java
网页内容获取:Scala自动化脚本的实现
网页内容获取:Scala自动化脚本的实现