摘要: Linux的用户在登录(login)之后,就带有一个用户身份(user ID, UID)和一个组身份(group ID, GID)。在Linux文件管理背景知识中,我们又看到,每个文件又有九位的权限说明,用来指明该文件允许哪些用户执行哪些操作(读、写或者执行)。(参考Linux文件管理背景知识)一般来说,Linux的用户信息保存在/etc/passwd中,组信息保存在/etc/group中,文件的每一行代表一个用户/组。早期的Linux将密码以名码的形式保存在/etc/passwd中,而现在则多以暗码(也就是加密之后的形式)的形式保存在/etc/shadow中。将密码存储在/etc/shado 阅读全文
posted @ 2013-04-09 17:04 业精于勤荒于嬉 阅读(930) 评论(2) 推荐(1) 编辑
摘要: 源地址:http://blog.csdn.net/kapuliyuehan/article/details/7421817optparse是一个比getopt模块更方便、灵活、强大的库,它主要用来解析命令行选项。optparse使用如下方式来解析命令行选项:你创建一个OptionParser实例, 填充选项, 解析命令行.optparse允许用户以传统的GNU/POSIX语义指定选项,此外还能为你产生使用说明和帮助信息。optparse采用预先定义好的选项来解析命令行参数,optparse默认就是解析命令行参数的。下面是一个使用optparse的简单脚本:from optparse impor 阅读全文
posted @ 2013-04-03 15:09 业精于勤荒于嬉 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 动态类型(dynamic typing)是Python另一个重要的核心概念。我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值。这些都与动态类型的概念相关。1. 动态类型在我们接触的对象中,有一类特殊的对象,是用于存储数据的。常见的该类对象包括各种数字,字符串,表,词典。在C语言中,我们称这样一些数据结构为变量。而在Python中,这些是对象。对象是储存在内存中的实体。而我们的变量,实际上只是指向这一对象的参考(reference),类似于C语言的指针。(在C语言中,变量自身就是存储于内存中的实体)变量和它所指的对象的分离,就是动态类型的核心。 阅读全文
posted @ 2013-04-02 16:46 业精于勤荒于嬉 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 我们以下图为基础,说明Linux的架构(architecture)。(该图参考《Advanced Programming in Unix Environment》)最内层是我们的硬件,最外层是我们常用的各种应用,比如说使用firefox浏览器,打开evolution查看邮件,运行一个计算流体模型等等。硬件是我们的物质基础,而应用是我们所要奋斗的目标,但在两者之间,还要经过一番周折。还记得我们在Linux启动的时候。首先会启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。为了我们方便调 阅读全文
posted @ 2013-04-01 16:56 业精于勤荒于嬉 阅读(823) 评论(0) 推荐(1) 编辑
摘要: 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令 (instruction)。所谓的程序(program),就是这样一系列指令的所构成的集合。通过程序,我们可以让计算机完成复杂的操作。程序大多数时候被存储为可执行的文件。这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭菜。那么,程序和进程(process)的区别又是什么呢?进程是程序的一个具体实现。只有食谱没什么用,我们总要按照食谱的指点真正一步步实行,才能做出菜肴。进程是执行程序的过程,类似于按照食谱,真正去做菜的过程。同一个程序可以执行多次,每次都 阅读全文
posted @ 2013-04-01 16:19 业精于勤荒于嬉 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 由于大多数程序不需要有多线程的能力,所以在Python启动的时候并不支持多线程。也就是说,Python中支持多线程所需要的数据结构特别是GIL并没有创建。当Python虚拟机启动的时候,多线程处理并没有打开,而仅仅支持单线程。只有当程序中使用了如thread.start_new_thread等方法的时候,python才知道需要有多线程处理的支持,此时,python虚拟机才会自动创建多线程处理所需要的数据结构与GIL。生成和终止线程(由于thread模块比较低级,不被推荐使用,所以就不说了)1 使用threading.Thread类(构造函数:Thread(group = None, targe 阅读全文
posted @ 2013-03-31 22:48 业精于勤荒于嬉 阅读(1504) 评论(0) 推荐(0) 编辑
摘要: 使用 subprocess 模块管理进程 上篇针对进程的创建和终止做了一些说明,但是,这些仅仅是基本的进程管理函数,无法满足复杂的需求。因此,Python提供了subporcess模块进程高级的进程管理。subprocess可以调用外部的系统命令创建新的子进程,同时连接到子进程的input/output/error管道上,并得到子进程的返回值。subprocess模块中提供了一个类和两个实用函数来管理进程,下面进行分别介绍1 使用Popen类管理进程 subprocess模块中高级进程的管理能力来自于Popen来的灵活使用,这源于该类中函数原型的丰富参数。class Popen(args,.. 阅读全文
posted @ 2013-03-31 17:14 业精于勤荒于嬉 阅读(583) 评论(0) 推荐(1) 编辑
摘要: 线程与进程的概念 对于一般程序而言,可能会有若干个进程,同时,每个进程又可能有多个同时执行的线程。进程是资源管理的最小单元,线程是程序执行的最小单元1 进程 直观来讲,进程就是正在执行的程序,是多任务操作系统执行任务的基本单元,是包含了程序指令与相关资源的集合。操作系统分隔各个进程可以访问的地址区域。如果进程间需要传递信息,可以使用进程间通信(IPC)或其他方式,如文件 数据库等。在进程调度中,进程切换需要的时间比较多。为了能够更好的支持信息共享和减小切换开销,从进程中演化出了线程。2 线程 线程是进程的执行单元。对于大多数程序来说,可能只有一个主线成,但是为了能够提高效率,有些程序会采... 阅读全文
posted @ 2013-03-31 15:30 业精于勤荒于嬉 阅读(1040) 评论(0) 推荐(1) 编辑