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模块它提供的功能是更加接近于操作系统层面. 应用场景:平时用的比较多的时间戳,等时间方面的操作,在爬虫方面经常 ...
随机推荐
- kibana We couldn't activate monitoring
调节一下监控状态查询的时间范围,有时候,刚启动监控,数据没有生成.把”last 1 hour“改成 具体有数据的时间 用如下语句查看,监控日志在不断生成.重启kibana后正常有监控画面了. GET ...
- 【Activiti学习之八】Spring整合Activiti
环境 JDK 1.8 MySQL 5.6 Tomcat 8 idea activiti 5.22 activiti-explorer是官方提供的一个演示项目,可以使用页面管理Activiti流程.ac ...
- CentOS下安装php 5.6.19
# php安装包下载wget https://www.php.net/distributions/php-5.6.19.tar.bz2# 解压bunzip2 php-5.6.19.tar.bz2tar ...
- PowerBuilder学习笔记之14用户自定义对象
教程链接:https://wenku.baidu.com/view/9730d1c7aa00b52acec7ca05.html?re=view&rec_flag=default&sxt ...
- [SOJ #721]第三送分题(2019-11-14考试)/[CF675E]Trains and Statistic
题目大意 在一条直线上有\(n\)个点.在第\(i\)个点可以花费\(1\)的代价到达\((i,a_i]\)中任意一点,用\(S[i][j]\)表示从点\(i\)到点\(j\)的最少花费,求\(\su ...
- 『异或粽子 堆 可持久化trie』
异或粽子 Description 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 n 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 1 到 n.第 i 种馅儿 ...
- 排序算法Java代码实现(一)—— 选择排序
以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...
- nginx部署angular
官方部署教程 本文将angular官网的示例项目 heroes(英雄指南) 部署到nginx. 使用angular cli编译项目 ng build 执行完成后会生成一个 dist 目录. 服务器配置 ...
- Docker中上传镜像到docker hub中
原文参考:https://blog.csdn.net/sk_grace/article/details/81220675 申请Docker hub账号首先在https://hub.docker.com ...
- 第一阶段:Java基础 1.JAVA开发介绍---6. Java基本数据类型
Java 的两大数据类型: 内置数据类型(基本数据类型) 引用数据类型 本数据类型: Java语言提供了八种基本类型.六种数字类型,一种字符类型,还有一种布尔型. byte,short,int,lon ...