#!/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源码解析