Python库的使用之-Sys模块
Python标准库之sys模块使用详解,讲解了使用sys模块获得脚本的参数、处理模块、
使用sys模块操作 模块搜索路径、使用sys模块查找内建模块、使用sys模块查找已导入的模块,重定向输出以及重定向错误等使用案例
sys模块提供了许多函数和变量来处理 Python 运行时环境的不同部分.
处理命令行参数:在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称.
【1】使用sys模块获得脚本的参数(给程序在外部传递参数):
test.py文件:
#!usr/bin/env python
#coding:utf-8
import sys
print 'sys.argv=',sys.argv
print 'The script name is',sys.argv[0] #使用sys.argv[0]采集脚本名称
if len(sys.argv)>1:
print 'There are',len(sys.argv)-1,'arguments!' #使用len(sys.argv)-1采集参数个数,-1为减去[0]脚本名称
for arg in sys.argv[1:]: #输出除了[0]外所有参数
print arg
else:
print 'There is no argument!'
运行结果:
song@ubuntu:~$ python test.py
sys.argv= ['test.py']
The script name is test.py
There is no argument!
song@ubuntu:~$ python test.py argument1 argument2
sys.argv= ['test.py', 'argument1', 'argument2']
The script name is test.py
There are 2 arguments!
argument1
argument2
song@ubuntu:~$
【2】如果是从标准输入读入脚本, 脚本的名称将被设置为空串。
song@ubuntu:~$ python < test.py
sys.argv= ['']
The script name is
There is no argument!
【3】如果把脚本作为字符串传递给python (在命令行下选用 -c 选项), 脚本名会被设置为 "-c"。
song@ubuntu:~$ python -c "import sys;print sys.argv;print sys.argv[0]" arg1 arg2
['-c', 'arg1', 'arg2']
-c
song@ubuntu:~$
如果大家不明白,可以参考下man python
SYNOPSIS
python [ -d ] [ -E ] [ -h ] [ -i ] [ -m module-name ] [ -O ]
[ -Q argument ] [ -S ] [ -t ] [ -u ]
[ -v ] [ -V ] [ -W argument ] [ -x ]
[ -c command | script | - ] [ arguments ]
处理模块:
我们在使用模块的某一个功能前,需要用import,__import__命令导入。
那我们在执行import module_name的时候,python内部发生了什么呢?
简单的说,就是搜索module_name。根据sys.path的路径来搜索module.name
>>> import sys
>>> sys.path
['', '/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', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
>>>
我们以后写好的模块就可以放到上面的某一个目录下,便可以正确搜索到了。当然也可以添加自己的模块路径。sys.path.append(“my module path”)。
>>> sys.path.append('my module path')
>>> sys.path
['', '/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', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', 'my module path']
>>>
path列表是一个由目录名构成的列表, Python 从中查找扩展模块( Python 源模块, 编译模块,或者二进制扩展).
启动 Python 时,这个列表根据内建规则, PYTHONPATH 环境变量的内容, 以及注册表( Windows 系统)等进行初始化.
由于它只是一个普通的列表, 你可以在程序中对它进行操作。。。
【4】操作sys模块中的搜索路径:
path.py文件:
#!usr/bin/env python
#coding:utf-8
import sys
print 'sys.path=',sys.path
print 'sys.path has',len(sys.path),'members.'
sys.path.insert(0,'/tmp') #将路径插入到path[0]中
print 'sys.path=',sys.path
print 'sys.path has',len(sys.path),'members.'
sys.path=[] #删除path中所有路径
print 'sys.path=',sys.path
print 'sys.path has',len(sys.path),'members.'
#上述对sys.path的修改,仅仅在当前文件中有效,并不会修改python标准库中的sys模块。。。
运行结果:
song@ubuntu:~$ python path.py
sys.path= ['/home/song', '/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', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
sys.path has 12 members.
sys.path= ['/tmp', '/home/song', '/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', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
sys.path has 13 members.
sys.path= []
sys.path has 0 members.
【5】使用sys模块查找内建模块:
builtin_module_names 元组包含 Python 解释器中所有内建模块的名称
find_module.py文件:
def find_module(module):
print module,'=>',
if module in sys.builtin_module_names: #查找内建模块是否存在
print '<biultin>'
else:
mod=__import__(module) #非内建模块 输出模块路径
print mod.__file__ import sys
print 'sys.builtin_module_names=',sys.builtin_module_names
find_module('os')
find_module('sys')
find_module('string')
find_module('strop')
find_module('zlib')
Python库的使用之-Sys模块的更多相关文章
- Python学习笔记:import sys模块(argv、path、platform、exit)
sys模块是Python标准库中自带的一个模块. sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与当前程序之外的系统环境交互,如:Pyth ...
- Python学习总结12:sys模块
sys模块常用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互. 1. 导入及函数查看 >>> import sys #导入sys模块 >>&g ...
- Python库:序列化和反序列化模块pickle介绍
1 前言 在“通过简单示例来理解什么是机器学习”这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 通过简单示例来理解什么是机器学习 pickle是python语言的一个标准模块,安装pyt ...
- python(31)——【sys模块】【json模块 & pickle模块】
一.sys模块 import sys sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit() #退出程序,正常退出时exit(0) sys.version #获取pyt ...
- 小白的Python之路 day5 os,sys模块详解
os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...
- Python基础之datetime、sys模块
1.datetime模块 1)datetime.datetime.now(),返回各当前时间.日期类型. datetime.datetime.now(),返回当前日期. import datetime ...
- Python之文件操作:sys模块
1.sys.argv sys.argv 接受从外部传入的参数 import sys print sys.argv if sys.argv[1] == '--help': print 'True' ...
- Python基础-os模块 sys模块
sys模块 与操作系统交互的一个接口 文件夹相关 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') ...
- Python库指南
Python库指南 1.time模块 作用:time模块是一个时间模块,与datetime模块它提供的功能是更加接近于操作系统层面. 应用场景:平时用的比较多的时间戳,等时间方面的操作,在爬虫方面经常 ...
随机推荐
- 利用ffmpeg获取视频帧
如果要对视频帧进行处理,可以先把视频帧读取出来. sh文件代码如下: #!/usr/bin/env sh VIDEO=/home/xxx/video/ FRAMES=/home/xxx/frame/ ...
- [EXP]CVE-2019-1821 Cisco Prime Infrastructure思科未授权远程代码执行漏洞
CVE-2019-1821 Cisco Prime Infrastructure Remote Code Execution https://srcincite.io/blog/2019/05/17/ ...
- spring cloud 服务容错保护 - Hystrix
1.为什么要断路器 在微服务架构中通常会涉及到多个服务间调用,处于调用链路底层的基础服务故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供 ...
- spring aop 一个挡板例子
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...
- C++删除排序数组中的重复项
class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) { ; } ...
- 【学习笔记】Docker基础
基本概念 Docker是什么? Docker是一种基于Golang开发的虚拟化技术,开发人员和系统管理员使用容器开发,部署和运行应用程序的平台. 使用Linux容器部署应用程序称为容器化. 容器不是新 ...
- sqlserver获得数据库非聚集索引的代码
创建Index DECLARE @zindex_sql NVARCHAR(max); SET @zindex_sql = N''; SELECT @zindex_sql = @zindex_sql + ...
- 思维导图xmind的文档保存问题
如果文件名相同,可能最新的文档覆盖以前的.当前活动文档只能有一个,如果有多个,保存后,其他活动文档也被更新了. 新建一个空白doc文档,仅仅是文件名,作为附件导入到xmind中,在xmind中保存后, ...
- ThreadLocal定义、使用案例及源码分析
原文连接:(http://www.studyshare.cn/blog/details/1165/0 ) 一.ThreadLocal定义 jdk官方文档定义是:该类提供线程局部变量. 这些变量与其正常 ...
- HTML中marquee标签的使用
HTML5之前,marquee作为滚动标签被经常使用,具体用法如下: <marquee>默认向左滚动</marquee> 选项: 1.behavior 滚动的方式 altern ...