keystone入口manage.py
/opt/stack/keystone/keystone/cmd/manage.py
OpenStack所有项目都是基于Python开发,并且都是标准的Python项目,通过setuptools工具管理项目,负责Python模块的安装和分发。想知道一个项目有哪些服务组成,最直接有效的办法就是找到入口函数(main函数)在哪里,只要是标准的基于setuptools管理的项目的所有入口函数都会在项目根目录的setup.cfg文件中定义,console_scripts就是所有服务组件的入口,比如nova(Mitaka版本)的setup.cfg的console_scripts如下:
[entry_points]
...
console_scripts =
进入到cd /opt/stack/keystone/keystone/cmd/ 这个目录,然后python命令进入python环境
python
import os
import sys
>>> os.getcwd() #获区当前目录
'/opt/stack/keystone/keystone/cmd'
>>> dir1 = '/opt/stack/keystone/keystone/cmd' #获区该目录下的文件列表
>>> os.listdir(dir1)
['__init__.py', 'status.py', 'bootstrap.py', 'cli.pyc', 'doctor', 'manage.py', '__init__.pyc', 'manage.pyc', 'cli.py', 'bootstrap.pyc']
>>> print os.path.abspath('manage.py') #注意括号中的文件名需要加上引号
/opt/stack/keystone/keystone/cmd/manage.py
>>> os.path.abspath('manage.py')
'/opt/stack/keystone/keystone/cmd/manage.py'
>>>
>>> possible_topdir = os.path.normpath(os.path.join(os.path.abspath('manage.py'),
... os.pardir,
... os.pardir,
... os.pardir))
>>> possible_topdir
'/opt/stack/keystone'
>>> os.pardir
'..'
>>>
>>> dir2 = os.path.join(possible_topdir, 'keystone','__init__.py')
>>> dir2
'/opt/stack/keystone/keystone/__init__.py'
>>>
>>> os.path.exists('/opt/stack/keystone/keystone/__init__.py')
True
>>>
>>> sys.path.insert(0, possible_topdir) #最终结果就是往sys.path里添加了/opt/stack/keystone这个路径,往列表里指定索引位置插入元素sys.path.insert(0, possible_topdir)
>>> sys.path #是一个列表
['', '/opt/stack/keystone', '/opt/stack/cinder', '/opt/stack/neutron', '/opt/stack/nova', '/opt/stack/placement', '/opt/stack/horizon', '/opt/stack/glance', '/opt/stack/tempest', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
>>>
>>> sys.argv # 返回一个空列表
['']
/opt/stack/keystone/keystone/cmd/cli.py 通过manage.py调用cli.py里的main函数
/usr/local/lib/python2.7/dist-packages 中可以找到oslo
keystone入口manage.py的更多相关文章
- django源码分析 python manage.py runserver
django是一个快速开发web应用的框架, 笔者也在django框架上开发不少web应用,闲来无事,就想探究一下django底层到底是如何实现的,本文记录了笔者对django源码的分析过程 I be ...
- django 1.7之后python manage.py syncdb没有了
在命令行输入python manage.py createsuperuser按照提示输入即可记得先初始化表. django>1.7 python manage.py makemigrations ...
- 【Django】如何自定义manage.py命令? 达到启动后台进程的目的?
代码: #-*- coding:utf- -*- """ The handle active user mail send """ from ...
- Python Django manage.py提供的命令及用法
λpython manage.pyType'manage.py help <subcommand>'for help on a specific subcommand. Available ...
- python manage.py shell之后的一些错误:
1. 在执行python manage.py shell之后的一些错误: wyl@wyl:~/myobject$ python manage.py shell /usr/lib/python2.7/d ...
- 启动python解释器的命令(python manage.py shell和python的区别)
如果你曾经使用过Python,你一定好奇,为什么我们运行python manage.py shell而不是python.这两个命令都会启动交互解释器,但是manage.py shell命令有一个重要的 ...
- Django学习之manage.py使用
1.django-admin.py startproject mysite 开始一个项目,会初始化一些项目的结构文件 2.python manage.py runserver ip:port 如: p ...
- django manage.py 的各种功能
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage. ...
- 执行manage.py syncdb提示Unknown command: 'syncdb'
1. 实验环境 ubuntu14.4 + django1.9.7 2. 问题描述 在配置完数据库mysite/settings.py后,通常需要运行 python manage.py syncdb 为 ...
随机推荐
- 异步消息处理机制相关面试问题-intentservice面试问题详解
IntentService是什么? IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService方法和启动传统的S ...
- Linux文件归档管理
Linux怎样保存文件 数据 - 这里数据就是文件的内容 元数据 - 在linux系统中,所有与某个文件相关的额外信息都保存在一个叫做i-节点(inode)的结构中 文件名 - 文件名保存在名为目录项 ...
- inclusion_tag模块
目录 inclusion_tag模块 inclusion_tag模块 1.当页面上某一块区域的内容需要在多个页面上展示的使用,并且该区域的内容需要通过传参数才能正常显示,那么我们可以优先考虑inclu ...
- Flyway对比Liquibase(转)
数据库迁移工具. 很多应用的运行是需要数据库支持的,而随着快速迭代,产品更替的节奏加快,除了产品本身需要不断更新以外,数据库也需要做出合适的管理了. 为什么需要数据库迁移管理 比如第一个版本的产品只包 ...
- springboot整合mongodb问题1-Decimal128和BigDecimal的转换之mongodb转换器使用(转)
转自:https://blog.csdn.net/weixin_41792559/article/details/79575524 1.Decimal128的了解由于mongodb4.3以上新加了De ...
- 【51nod 2004】终结之时
题目大意 "将世界终结前最后的画面,深深刻印进死水般的心海." 祈愿没有得到回应,雷声冲破云霄,正在祈愿的洛天依受到了极大的打击. 洛天依叹了口气,说:"看来这个世界正如 ...
- Unicode规范中的BOM 和 ISO8891-1编码
Unicode规范中的BOM Unicode规范中有一个BOM的概念.BOM——Byte Order Mark,就是字节序标记.在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做" ...
- JVM(二),Java怎样实现一次编译到处运行(平台无关性)
二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...
- mysql的五大引擎跟优劣之分
MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MERGE.MEMORY(HEAP).EXAMPLE.ARCHIVE.CSV. · MEMORY存储引擎提供“内存中”表.ME ...
- 洛谷p2375 kmp
题意 给你一个字符串,让你求一个\(num\)数组,\(num[i]\)为长度为\(i\)的前缀的公共前后缀长度不超过\(\lfloor \frac{i}{2}\rfloor\)的个数, 例如&quo ...