robot文件夹下的__main__.py函数 是使用module运行时的入口函数:

 import sys

 # Allows running as a script. __name__ check needed with multiprocessing:
# https://github.com/robotframework/robotframework/issues/1137
if 'robot' not in sys.modules and __name__ == '__main__':
import pythonpathsetter from robot import run_cli run_cli(sys.argv[1:])
STEP 1.
if 'robot' not in sys.modules and __name__ == '__main__': [explain]: 如果robot module包含在sys.modules 中则import pythonpathsetter 模块
 
STEP 2.
import pythonpathsetter
[explain]: 这个模块的朱啊哟作用是保证用户在引用时以module的形式进行引用,
不能直接引用内部脚本  pythonpathsetter.py
 import sys
import fnmatch
from os.path import abspath, dirname ROBOTDIR = dirname(abspath(__file__)) def add_path(path, end=False):
if not end:
remove_path(path)
sys.path.insert(0, path)
elif not any(fnmatch.fnmatch(p, path) for p in sys.path):
sys.path.append(path) def remove_path(path):
sys.path = [p for p in sys.path if not fnmatch.fnmatch(p, path)] # When, for example, robot/run.py is executed as a script, the directory
# containing the robot module is not added to sys.path automatically but
# the robot directory itself is. Former is added to allow importing
# the module and the latter removed to prevent accidentally importing
# internal modules directly.
add_path(dirname(ROBOTDIR)) #或者去pythonpathsetter.py的上级目录, 加到sys.path中, 供导入模块使用
remove_path(ROBOTDIR) #从sys.path 中删除掉pythonpathsetter.py文件所在的目录, 防止内部脚本被直接应用

[ps]:

abspath 返回文件所在的绝对路径

dirname 返回上一级路径

abspath("monitor.log")
'E:\\Software\\Software\\Python2.7.11\\Lib\\site-packages\\robot\\monitor.log'
ap = abspath("monitor.log")
dp = dirname(ap)
dp
'E:\\Software\\Software\\Python2.7.11\\Lib\\site-packages\\robot'
STEP 3.
 from robot import run_cli

 run_cli(sys.argv[1:])
从模块中导入run_cli函数供采集运行module时传入的参数
E:\Software\Software\Python2.7.11\Lib\site-packages\robot>python -m robot --help
*** cli_arguments *** ['--help']
Robot Framework -- A generic test automation framework Version: 3.0 (Python 2.7.11 on win32) Usage: robot [options] data_sources
or: python -m robot [options] data_sources
or: python path/to/robot [options] data_sources
or: java -jar robotframework.jar [options] data_sources
,,, ,,, ,,, ,,,

 

Robot Framework 源码阅读 day1 __main__.py的更多相关文章

  1. Robot Framework 源码阅读 day1 run.py

    robot里面run起来的接口主要有两类 run_cli def run_cli(arguments): """Command line execution entry ...

  2. Robot Framework 源码阅读 day2 TestSuitBuilder

    接上一篇 day1 run.py 发现build test suit还挺复杂的, 先从官网API找到了一些资料,可以看出这是robotframework进行组织 测试案例实现的重要步骤, 将传入的te ...

  3. Robot Framework 源码解析(1) - java入口点

    一直很好奇Robot Framework 是如何通过关键字驱动进行测试的,好奇它是如何支持那么多库的,好奇它是如何完成截图的.所以就打算研究一下它的源码. 这是官方给出的Robot framework ...

  4. Robot Framework源码解析(2) - 执行测试的入口点

    我们再来看 src/robot/run.py 的工作原理.摘录部分代码: from robot.conf import RobotSettings from robot.model import Mo ...

  5. vnpy源码阅读学习(1):准备工作

    vnpy源码阅读学习 目标 通过阅读vnpy,学习量化交易系统的一些设计思路和理念. 通过阅读vnpy学习python项目开发的一些技巧和范式 通过vnpy的设计,可以用python复现一个小型简单的 ...

  6. python3 源码阅读-虚拟机运行原理

    阅读源码版本python 3.8.3 参考书籍<<Python源码剖析>> 参考书籍<<Python学习手册 第4版>> 官网文档目录介绍 Doc目录主 ...

  7. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  8. JDK源码阅读(1)_简介+ java.io

    1.简介 针对这一个版块,主要做一个java8的源码阅读笔记.会对一些在javaWeb中应用比较广泛的java包进行精读,附上注释.对于容易混淆的知识点给出相应的对比分析. 精读的源码顺序主要如下: ...

  9. Spring源码阅读笔记

    前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精 ...

随机推荐

  1. mysql CREATE DATABASE语句 语法

    mysql CREATE DATABASE语句 语法 作用:创建数据库. 大理石构件 语法:CREATE DATABASE database_name mysql CREATE DATABASE语句 ...

  2. 2017南宁网络赛 Problem J Minimum Distance in a Star Graph ( 模拟 )

    题意 : 乱七八糟说了一大堆,实际上就是问你从一个序列到另个序列最少经过多少步的变化,每一次变化只能取序列的任意一个元素去和首元素互换 分析 : 由于只能和第一个元素去互换这种操作,所以没啥最优的特别 ...

  3. Java——面向对象编程

    在面向对象的编程中,不能再有第一步.第二步怎么做的概念.   [对象和类]  

  4. 最小生成树(Kruskal算法)模板

    #include<iostream> #include<algorithm> using namespace std; ],n; struct node { int u,v,v ...

  5. [USACO19JAN]Shortcut题解

    本题算法:最短路树 这是个啥玩意呢,就是对于一个图,构造一棵树,使从源点开始的单源最短路径与原图一模一样.怎么做呢,跑一边Dijkstra,然后对于一个点u,枚举它的边,设当前的边为cur_edge, ...

  6. WEB编程 入门简单 进阶难

    其实不论是WEB还是其他什么编程,都是这个道理,至于为什么,我贴几段代码,大家感受下. JS 计算今天是星期几 入门级 // 计算系统当前是星期几 var str =""; var ...

  7. AT2371 Placing Squares

    题解 考虑\(dp\) \[ dp[i]=\sum_{i=0}^{i-1}dp[j]*(i-j)^2 \] 我们可以设\((i-j)\)为\(x\),那么随着\(i\)向右移动一格,每个\(x\)都是 ...

  8. Java数据结构与算法(2):栈

    栈是一种线性表,特点在于它只能在一个位置上进行插入和删除,该位置是表的末端,叫做栈的顶(top).因此栈是后进先出的(FIFO).栈的基本操作有push.peek.pop. 栈的示意图 进栈和出栈都只 ...

  9. 状压dp(8.8上午)

    神马是状态压缩? 就是当普通dp的每一维表示的状态非常少的时候,可以压缩成一维来表示 如果m==8 dp[i][0/1][0/1]......[0/1] 压缩一下 dp[i][s]表示到了第i行,状态 ...

  10. scrapy 配置文件指定如何导出数据

    1.导出文件路径 FEED_URI = 'export_data/%(name)s.data' 2.导出数据格式 FEED_FORMAT = 'csv' 3.导出文件编码 FEED_EXPORT_EN ...