Django-manage.py

王飞虎
2023-12-01
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "firstsite.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)

import os

os模块
os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小……
http://www.cnblogs.com/kaituorensheng/archive/2013/03/18/2965766.html
python调用Shell脚本:os.system(cmd)或os.popen(cmd)的区别

import sys

sys模块
(1)sys.argv—外部传递过来的参数
test.py

#!/usr/local/bin/env python
import sys
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])

cmd中运行脚本传递参数可以在内部接受并打印

C:\Users\Administrator\Desktop>python test.py 1 2 3
test.py
1
2
3
python [ -d ] [ -E ] [ -h ] [ -i ] [ -m module-name ] [ -O ]
              [ -Q argument ] [ -S ] [ -t ] [ -u ]
              [ -v ] [ -V ] [ -W argument ] [ -x ]
              [ -c command | script | - ] [ arguments ]

(2)sys.platform—判断平台类型(字符串)

>>> import sys
>>> print(sys.platform)
win32
>>> import types
>>> type(sys.platform)
<class 'str'>
>>>
import types  

aaa = 0  
print type(aaa)  
if type(aaa) is types.IntType:  ###
    print "the type of aaa is int"  
if isinstance(aaa,int):  
    print "the type of aaa is int"  

(3) sys.exit(n)
执行至主程序的末尾时,解释器会自动退出. 但是如果需要中途退出程序, 你可以调用sys.exit 函数, 它带有一个可选的整数参数返回给调用它的程序. 这意味着你可以在主程序中捕获对sys.exit 的调用。(注:0是正常退出,其他为不正常,可抛异常事件供捕获!)
http://blog.csdn.net/GeekLeee/article/details/52794826
(4)sys.path—查询python模块路径
大家对模块都有一定了解吧?大家在使用模块的某一个功能前,是不是需要导入呢?答案是需要。那import,import命令就不用提干嘛的了吧。那大家在执行import module_name的时候,python内部发生了什么呢?简单的说,就是搜索module_name。根据sys.path的路径来搜索module.name

>>> sys.path
['', '/usr/local/lib/python24.zip', '/usr/local/lib/python2.4', '/usr/local/lib/python2.4/plat-freebsd4', '/usr/local/lib/python2.4/lib-tk', '/usr/local/lib/python2.4/lib-dynload', '/usr/local/lib/python2.4/site-packages']

大家以后写好的模块就可以放到上面的某一个目录下,便可以正确搜索到了。当然大家也可以添加自己的模块路径。sys.path.append(“mine module path”).
(5)sys.modules
Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。
详细信息参考:
http://www.cnblogs.com/qq78292959/archive/2013/05/17/3083961.html
扩展知识:
Python在import其它模块时,是从sys.path中搜索的。
sys.path的初始值会受到PYTHONPATH、PYTHONHOME等环境变量的影响。
也可以在脚本运行过程中动态修改sys.path从而import自己需要的模块。
(6)sys.stdin,sys.stdout,sys.stderr

#!/usr/local/bin/env python

print('Hi, %s!' % input('Please enter your name:'))

当你用键盘输入你的名字后,程序在屏幕上输出Hi,[你的名字]!, 这就是从标准输入:键盘获取信息,再输出到标准输出:屏幕的例子。
Python程序的标准输入/输出/出错流定义在sys模块中,分别 为: sys.stdin, sys.stdout, sys.stderr

#!/usr/local/bin/env python
import sys
sys.stdout.write('hello world!')
print('')
print('please enter your name:')
name = sys.stdin.readline()[:-1]
print('Hi,%s' % name)
================ RESTART: C:\Users\Administrator\Desktop\1.py ================
hello world!
please enter your name:
dd
Hi,dd
>>> 

那么sys.stdin, sys.stdout, stderr到底是什么呢?我们在Python运行环境中输入以下代码:

import sys
for f in (sys.stdin, sys.stdout): 
    print(f)

输出为:

================ RESTART: C:\Users\Administrator\Desktop\1.py ================
<idlelib.run.PseudoInputFile object at 0x0000000002F15470>
<idlelib.run.PseudoOutputFile object at 0x0000000002F154A8>
>>> 

由此可以看出stdin, stdout在Python中无非都是文件属性的对象,他们在Python启动时自动与Shell 环境中的标准输入,输出,出错关联。

if name == “main“:

有句话经典的概括了这段代码的意义:
“Make a script both importable and executable”
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。

当该module被其它module 引入使用时,其中的"if __name__=="__main__":"所表示的Block不会被执行,这是因为此时module被其它module引用时,其__name__的 值将发生变化,__name__的值将会是module的名字。比如在python shell中import sys后,查看sys.__name__

>>> import sys
>>> sys.__name__
'sys'
>>>

在python中,
当执行单个module时,moduel.__name__的值将是"__main__"
当一个 module被其它module引用时module.__name__将是module自己的名字,当然一个module被其它module引用时,其 本身并不需要一个可执行的入口main了。可以说python中的这种用法很灵活啊。
Django源码解析

 类似资料: