/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的更多相关文章

  1. django源码分析 python manage.py runserver

    django是一个快速开发web应用的框架, 笔者也在django框架上开发不少web应用,闲来无事,就想探究一下django底层到底是如何实现的,本文记录了笔者对django源码的分析过程 I be ...

  2. django 1.7之后python manage.py syncdb没有了

    在命令行输入python manage.py createsuperuser按照提示输入即可记得先初始化表. django>1.7 python manage.py makemigrations ...

  3. 【Django】如何自定义manage.py命令? 达到启动后台进程的目的?

    代码: #-*- coding:utf- -*- """ The handle active user mail send """ from ...

  4. Python Django manage.py提供的命令及用法

    λpython manage.pyType'manage.py help <subcommand>'for help on a specific subcommand. Available ...

  5. python manage.py shell之后的一些错误:

    1. 在执行python manage.py shell之后的一些错误: wyl@wyl:~/myobject$ python manage.py shell /usr/lib/python2.7/d ...

  6. 启动python解释器的命令(python manage.py shell和python的区别)

    如果你曾经使用过Python,你一定好奇,为什么我们运行python manage.py shell而不是python.这两个命令都会启动交互解释器,但是manage.py shell命令有一个重要的 ...

  7. Django学习之manage.py使用

    1.django-admin.py startproject mysite 开始一个项目,会初始化一些项目的结构文件 2.python manage.py runserver ip:port 如: p ...

  8. django manage.py 的各种功能

    [简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage. ...

  9. 执行manage.py syncdb提示Unknown command: 'syncdb'

    1. 实验环境 ubuntu14.4 + django1.9.7 2. 问题描述 在配置完数据库mysite/settings.py后,通常需要运行 python manage.py syncdb 为 ...

随机推荐

  1. 从二叉查找树到平衡树:avl, 2-3树,左倾红黑树(含实现代码),传统红黑树

    参考:自平衡二叉查找树 ,红黑树, 算法:理解红黑树 (英文pdf:红黑树) 目录 自平衡二叉树介绍 avl树 2-3树 LLRBT(Left-leaning red-black tree左倾红黑树 ...

  2. 学习shell(二)

    条件分支:  (条件表达式的中括号里面 空格不可以省略) = ] then echo '2 = 2'; else echo '2 != 2'; fi # 上面的代码不使用缩进, 并不会出错, 但不应该 ...

  3. redis异步处理

    $reids = new Redis; $redis->connect('localhost',6379); $redis->auth(''); //将数组转换成字符串再存到redis中 ...

  4. Listview操作

    设置 listView1.VirtualMode = true;   listView1.RetrieveVirtualItem += ListView1_RetrieveVirtualItem; p ...

  5. TensorFlow使用记录 (七): BN 层及 Dropout 层的使用

    参考:tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究 1. Batch Normalization ...

  6. jQuery事件之解绑事件

    语法: $(selector).unbind([eventType][,handler(eventObject)]); 返回值:jQuery 参数解释: eventTypey:类型:String以后包 ...

  7. CPU上下文切换分析

    一.CPU上下文切换 1.上下文切换,有时也称做进程切换或任务切换,是指CPU从一个进程或线程切换到另一个进程或线程. 2.vmstat是一个常用的系统性能分析工具,主要用来分析系统内存使用情况,也常 ...

  8. zookeeper系列(五)zookeeper在大型分布式系统中的应用

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6063694.html 尊重原创感谢博主公开这么好的博文, ...

  9. JSON 转含有泛型属性的对象

    在将 json 字符串转为对象时,如果对象含有泛型,在进行转换时需要指明泛型类型. 1. 对象只含有一个泛型属性时 1.1  代码 /** * @Describe: * @Author: chenfa ...

  10. linux vmware 安装步骤

    一.下载vmware软件 二.下载centos镜像文件 三.安装步骤 以上相当于于硬件设备已经准备ok,接下来安装软件