第二章 系统编程工具

python 系统级接口都集中在两个模块,sys和os。有一些其他的模块也属于这个领域:

glob        用于文件名扩展

socket      用于网络连接和进程间通信(ipc)

threading,_thread,queue 用于运行和同步化并发线程

time,timeit    用于获取系统时间相关细节

subprocess,multiprocessing 用于启动和控制并行线程

signal, select, shutill,tempfile

用于多种系统相关任务

还有诸如pySerial(一种串行端口接口) Pexpect(一种控制程序间对话的类Expect系统),Twisted(一种网络框架)等第三方扩展包也纳入系统编程领域. 

一些内建函数也是系统接口,例如open函数

获取模块文档

Python 3.5.0 (default, Nov 17 2015, 14:40:42) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys,os
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'set_coroutine_wrapper', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions']
>>>

dir函数用来查看模块导出的所有东西,它会返回一个列表里面包含模块所有的对象属性

还可以通过查询内置模块的_doc_字符串

>>> sys.__doc__
"This module provides access to some objects used or maintained by the\ninterpreter and to functions that interact strongly with the interpreter.\n\nDynamic objects:\n\nargv -- command line arguments; argv[0] is the script pathname if known\npath -- module search path; path[0] is the script directory, else ''\nmodules -- dictionary of loaded modules\n\ndisplayhook -- called to show results in an interactive session\nexcepthook -- called to handle any uncaught exception other than SystemExit\n  To customize printing in an interactive session or to install a custom\n  top-level exception handler, assign other functions to replace these.\n\nstdin -- standard input file object; used by input()\nstdout -- standard output file object; used by print()\nstderr -- standard error object; used for error messages\n  By assigning other file objects (or objects that behave like files)\n  to these, it is possible to redirect all of the interpreter's I/O.\n\nlast_type -- type of last uncaught exception\nlast_value -- value of last uncaught exception\nlast_traceback -- traceback of last uncaught exception\n  These three are only available in an interactive session after a\n  traceback has been printed.\n\nStatic objects:\n\nbuiltin_module_names -- tuple of module names built into this interpreter\ncopyright -- copyright notice pertaining to this interpreter\nexec_prefix -- prefix used to find the machine-specific Python library\nexecutable -- absolute path of the executable binary of the Python interpreter\nfloat_info -- a struct sequence with information about the float implementation.\nfloat_repr_style -- string indicating the style of repr() output for floats\nhash_info -- a struct sequence with information about the hash algorithm.\nhexversion -- version information encoded as a single integer\nimplementation -- Python implementation information.\nint_info -- a struct sequence with information about the int implementation.\nmaxsize -- the largest supported length of containers.\nmaxunicode -- the value of the largest Unicode code point\nplatform -- platform identifier\nprefix -- prefix used to find the Python library\nthread_info -- a struct sequence with information about the thread implementation.\nversion -- the version of this interpreter as a string\nversion_info -- version information as a named tuple\n__stdin__ -- the original stdin; don't touch!\n__stdout__ -- the original stdout; don't touch!\n__stderr__ -- the original stderr; don't touch!\n__displayhook__ -- the original displayhook; don't touch!\n__excepthook__ -- the original excepthook; don't touch!\n\nFunctions:\n\ndisplayhook() -- print an object to the screen, and save it in builtins._\nexcepthook() -- print an exception and its traceback to sys.stderr\nexc_info() -- return thread-safe information about the current exception\nexit() -- exit the interpreter by raising SystemExit\ngetdlopenflags() -- returns flags to be used for dlopen() calls\ngetprofile() -- get the global profiling function\ngetrefcount() -- return the reference count for an object (plus one :-)\ngetrecursionlimit() -- return the max recursion depth for the interpreter\ngetsizeof() -- return the size of an object in bytes\ngettrace() -- get the global debug tracing function\nsetcheckinterval() -- control how often the interpreter checks for events\nsetdlopenflags() -- set the flags to be used for dlopen() calls\nsetprofile() -- set the global profiling function\nsetrecursionlimit() -- set the max recursion depth for the interpreter\nsettrace() -- set the global debug tracing function\n"
>>>

分页显示文档字符串

>>> print(sys.__doc__)
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
Dynamic objects:
argv -- command line arguments; argv[0] is the script pathname if known
path -- module search path; path[0] is the script directory, else ''
modules -- dictionary of loaded modules
.............

print内置函数能够正确的解释换行符。但print本身并不完成页面滚动或者分页显示,会出现令人不满意的效果

这时可以用help内置函数:

>>> help(sys)
Help on built-in module sys:
NAME
    sys
MODULE REFERENCE
    http://docs.python.org/3.5/library/sys
    
    The following documentation is automatically generated from the Python
    source files.  It may be incomplete, incorrect or include features that
    are considered implementation detail and may vary between Python
    implementations.  When in doubt, consult the module reference at the
    location listed above.
DESCRIPTION
    This module provides access to some objects used or maintained by the
    interpreter and to functions that interact strongly with the interpreter.
    
    Dynamic objects:
    ........

help函数时pydoc系统提供的接口之一,pydoc系统是python自带的标准库代码,可以将对象相关的文档呈现为格式化后的html页面

一个自定义分页的脚本

#!/usr/bin/env python3
"""
分隔字符串或文本并交互地进行分页
"""
def more(text,numlines=15):
    lines = text.splitlines()
    while lines:
        chunk = lines[:numlines]
        lines = lines[numlines:]
        for line in chunk: print(line)
        if lines and input('More?') not in ['y','Y']: break
if __name__=='__main__':
    import sys
    more(open(sys.argv[1]).read(),10)


字符串方法基础知识

>>> mystr='xxxxspamxxxx'
>>> mystr.find('spam')
4
>>> mystr.index('spam')
4
>>> mystr='xxaaxxaa'
>>> mystr
'xxaaxxaa'
>>> mystr.replace('aa','spam')
'xxspamxxspam'
>>> mystr
'xxaaxxaa'
>>> mystr
'xxxspamxxx'
>>> 'spam' in mystr
True
>>> 'ni' in mystr
False
>>> mystr.find('ni')
-1
>>> mystr='\tNI\n'
>>> mystr
'\tNI\n'
>>> mystr.strip()
'NI'
>>> mystr.rstrip()
'\tNI'
>>> mystr
'SHABI'
>>> mystr.lower()
'shabi'
>>> mystr.isalpha()
True
>>> mystr.isdigit()
False
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.whitespace
' \t\n\r\x0b\x0c'
>>> mystr='aaa,bbb,ccc'
>>> mystr
'aaa,bbb,ccc'
>>> mystr.split(',')
['aaa', 'bbb', 'ccc']
>>> mystr='a b\nc\nd'
>>> mystr.split()
['a', 'b', 'c', 'd']
>>> delim='NI'
>>> delim.join(['aaa','bbb','ccc'])
'aaaaNIbbbNIccc'
>>> ' '.join(['A','aaa','bbb'])
'A aaa bbb'
>>> chars=list('lorreta')
>>> chars
['l', 'o', 'r', 'r', 'e', 't', 'a']
>>> chars.append('!')
>>> ''.join(chars)
'lorreta!'
>>> >>> mystr
'xxaaxxaa'
>>> 'SPAM'.join(mystr.split('aa'))
'xxSPAMxxSPAM'


你可能感兴趣的:(第二章 系统编程工具)