我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python 学习笔记 (8)—— sy

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python 学习笔记 (8)—— sy

主要介绍用的比较多的sys的模块命令包括:sys.argv,sys.platform,sys.getdefaultencoding,sys.setdefaultencoding(),sys.getfilesystemencoding(),sys.exit(n),sys.path,sys.modules.keys(),sys.stdin,sys.stdout,sys.stderr 等。

sys.argv    获取参数
参数获取从0开始,而不是1,0为命令本身
#!/usr/bin/python
import sys
print "I the first arg :", sys.argv[1]
print "I the second arg :", sys.argv[2]
print "All of the args are :"
for i in sys.argv:
        print i

执行结果:
[root@node1 python]# python arg.py hello python
I the first arg : hello
I the second arg : python
All of the args are :
arg.py
hello
python

sys.platform   获取当前操作系统平台

具体的返回值如下:
>>> import sys
>>> sys.platform
'linux2'

操作系统 返回值
Linux (2.x and 3.x)
'linux2'
Windows
 'win32' 
Windows/Cygwin
 'cygwin'
Mac OS X
'darwin' 
OS/2
 'os2'
OS/2 EMX
'os2emx' 
RiscOS
'riscos'
AtheOS
'atheos'

 

实例:
根据不同操作系统判断该使用什么命令,例如在在linux 下用“clear”而在windows下用“cls”

#!/usr/bin/python
import sys
ostype = sys.platform
if ostype == "linux" or ostype == "linux2":
        cmd = "clear"
else:
        cmd = "cls"
print "The clear command is :", cmd

[root@node1 python]# python os.py 
The clear command is : clear

sys.exit(n)        设置退出返回值(0表示正常退出,其他非0整数表示不正常,可以通过异常捕获)

 

#!/usr/bin/python
import sys
def exitFunc(value):
        '''Clear function'''
        print value
        sys.exit()

print "hello"

try:
        sys.exit(1)
except SystemExit,value:
        exitFunc(value)
print "Ok"

[root@node1 python]# python esc.py 
hello
1

sys.path      返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
在通过命令"import module_name"时,系统将在以下路径中查找导入的模块,其中第一个为空,表示当前目录
>>> import sys
>>> sys.path
['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', 
'/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', 
'/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages']

 

sys.modules.keys()    使用sys模块查找已导入的模块
>>> import sys
>>> print sys.modules.keys()
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath', 
'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport',
 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path',
 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os']

sys.getdefaultencoding()    获取系统当前编码,一般默认为ascii。


>>> import sys
>>> sys.getdefaultencoding()
'ascii'

sys.setdefaultencoding()    设置系统默认编码


执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),再执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf8')

 

sys.getfilesystemencoding()    获取文件系统使用编码方式
>>> sys.getfilesystemencoding()
'UTF-8'

 

sys.stdin,sys.stdout,sys.stderr
标准输入和标准错误 (通常缩写为 stdout 和 stderr) 是内建在每一个 UNIX 系统中的管道。 
当你 print 某些东西时,结果前往 stdout 管道;
当你的程序崩溃并打印出调试信息 (例如 Python 中的 traceback (错误跟踪)) 的时候,信息前往 stderr 管道 
stdout 是一个类文件对象;调用它的 write 函数可以打印出你给定的任何字符串。
实际上,这就是 print 函数真正做的事情;它在你打印的字符串后面加上一个硬回车,然后调用 sys.stdout.write 函数。

>>> for i in range(3):
...     print'Dive in'

Dive in
Dive in
Dive in
>>> import sys
>>> for i in range(3):
...     sys.stdout.write('Dive in')

Dive inDive inDive in
>>> for i in range(3):
...     sys.stderr.write('Dive in')

Dive inDive inDive in


在最简单的例子中,stdout 和 stderr 把它们的输出发送到相同的地方
和 stdout 一样,stderr 并不为你添加硬回车;如果需要,要自己加上。
stdout 和 stderr 都是类文件对象,但是它们都是只写的。
它们都没有 read 方法,只有 write 方法。然而,它们仍然是类文件对象,因此你可以将其它任何 (类) 文件对象赋值给它们来重定向其输出。

 

使用sys重定向输出
print 'Dive in'                 # 标准输出
saveout = sys.stdout            # 在重定向前保存stdout,这样的话之后你还可以将其设回正常
fsock = open('out.log', 'w')    # 打开一个新文件用于写入。如果文件不存在,将会被创建。如果文件存在,将被覆盖。
sys.stdout = fsock              # 所有后续的输出都会被重定向到刚才打开的新文件上。

print  'This message will be logged instead of displayed'    # 这样只会将输出结果“打印”到日志文件中;屏幕上不会看到输出
sys.stdout = saveout            # 在我们将 stdout 搞乱之前,让我们把它设回原来的方式。     
fsock.close()                   # 关闭日志文件。

重定向错误信息
fsock = open('error.log', 'w')                   # 打开你要存储调试信息的日志文件。 
sys.stderr = fsock                               # 将新打开的日志文件的文件对象赋值给stderr以重定向标准错误。
raise Exception, 'this error will be logged'     # 引发一个异常,没有在屏幕上打印出任何东西,所有正常的跟踪信息已经写进error.log

 

还要注意你既没有显式关闭日志文件,也没有将 stderr 设回最初的值。
这样挺好,因为一旦程序崩溃 (由于引发的异常),Python 将替我们清理并关闭文件打印到 stderr
向标准错误写入错误信息是很常见的,所以有一种较快的语法可以立刻导出信息

>>> print 'entering function'
entering function
>>> import sys
>>> print >> sys.stderr, 'entering function'

entering function 
print 语句的快捷语法可以用于写入任何打开的文件 (或者是类文件对象)。 
在这里,你可以将单个print语句重定向到stderr而且不用影响后面的print语句。

 

简明教程中的实例
import sys
def readfile(filename):
        '''Print a file to the standard output.'''
        f = file(filename)
        while True:
                line = f.readline()
                if len(line) == 0:
                        break
                print line,
        f.close()
if len(sys.argv) < 2:
        print 'No action specified.'
        sys.exit()
if sys.argv[1].startswith('--'):
        option = sys.argv[1][2:]
        if option == 'version':
                print "Version 1.2"
        elif option == 'help':
                print '''\
This program prints file to the standard output.
Any number of files can be specified.
Options include:
        --version : Prints the version number
        --help    : Display this help'''
        else:
                print 'Unknown option.'
else:
        for filename in sys.argv[1:]:
                readfile(filename)

 

执行结果:
[root@node1 python]# python cat.py 
No action specified.

[root@node1 python]# python cat.py --help
This program prints file to the standard output.
Any number of files can be specified.
Options include:
    --version : Prints the version number
    --help    : Display this help

 

[root@node1 python]# python cat.py --version
Version 1.2

 

[root@node1 python]# python cat.py --t
Unknown option.

 

[root@node1 python]# python cat.py /tmp/test.txt 
hello girl!
hello boy!
hello man!

 

工作原理:
定义readfile 函数逐行读取文件,执行脚本后,判断参数。
若参数长度小于2(命令本身占一个长度,也就是说,命令+参数),输出No action specified.
若参数是以“--”开头(通过sys.startswith 获取开头),则从该参数的第3个字符起截取,比如--help,得到的就是help
若取得的值为"help" 则显示帮助信息,若取得的值为"version",则显示版本信息
若没有匹配到任何选项,则显示“Unknown option”
若直接加文件名,则打印出文件内容

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python 学习笔记 (8)—— sy

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python 学习笔记 (8)—— sy

主要介绍用的比较多的sys的模块命令包括:sys.argv,sys.platform,sys.getdefaultencoding,sys.setdefaultencoding(),sys.getfilesystemencoding(),s
2023-01-31

Python学习笔记8——列表、字典、元

参考书籍:《Learning_Python_5th_Edition.pdf》,一本英文书呢,我上传到百度网盘吧,请点击这里,密码是:kym3Lists 列表The Python list object is the most general
2023-01-30

MySQL学习笔记(8):字符集

本文更新于2019-06-16,使用MySQL 5.7,操作系统为Deepin 15.4。目录常用字符集MySQL字符集常用字符集字符集定长代码宽度说明ASCII或ISO-646是1字节7位英文字母、数字、标点符号和33个控制符ISO-8859系列是1字节8位
MySQL学习笔记(8):字符集
2019-08-14

Python学习笔记

Python介绍Python是一种解释型、面向对象的语言。官网:www.python.orgPython环境解释器:www.python.org/downloads运行方式:交互模式。在IDLE中运行。脚本模式。文件的后缀名为.py。
2023-01-30

Python 学习笔记

rs=Person.objects.all()all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。print rs.query 会打印出原生sql语句rs=Person
2023-01-31

python学习笔记--趣学Python

由反弹球和球拍构成的游戏。球会在屏幕上飞过来,玩家要用球拍把它弹回去画布和画弹球引入模块#Tkinter -- Python的标准GUI库,Tk 接口,是python 内置的安装包from tkinter import *import ra
2023-01-31

Python学习笔记(1)

1 def sum_args(*args):2 return sum(args))3 4 def run_with_positional_args(func, *args):5 return func(*args)6
2023-01-31

Python 学习笔记 - SQLAlc

继续上一篇SQLAlchemy的学习之旅。多对多表的创建表Host和表HostUser通过表HostToHostUser关联在一起from sqlalchemy import create_enginefrom sqlalchemy.ext
2023-01-31

python scapy学习笔记

1. ubuntu下安装gnuplot 转自:http://blog.163.com/gz_ricky/blog/static/182049118201362501316961/2.安装PyX sudo pip install pyx==0
2023-01-31

python scrapy学习笔记

scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型。一、安装scrapy# pip install scrapy二、基本使用1、初始化scrapy项目# scrapy startproject
2023-01-31

python egg学习笔记

原文链接:http://www.worldhello.net/2010/12/08/2178.html经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install
2023-01-31

Python 学习笔记 - Memcac

Memcached是一个分布式内存对象缓存系统,他把数据缓存在内存里面来减少对数据库的访问,从而提高动态网页的访问速度。他的基本结构是key/value(键值对)。下面看看在Python里面如何使用。首先来安装一下服务器端,豆子直接在一个C
2023-01-31

Python学习笔记(matplotli

Python学习笔记--在Python中如何调整颜色和样式  参靠视频:《Python数据可视化分析 matplotlib教程》链接:https://www.bilibili.com/video/av6989413/?p=6所用的库及环境:
2023-01-30

python-memcached学习笔记

介绍:  memcached是免费、开源、高性能、分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用。  数据类型:只用一种字符串类型1:安装sudo apt-get install memcache
2023-01-31

Python学习笔记四(Python

Python os模块提供了一个统一的操作系统接口函数,通过python os模块可以实现对系统本身的命令,文件,目录进行操作,官方参考文档( http://docs.python.org/library/os)。1)os.sep 可以取代
2023-01-31

Python学习笔记-SQLSERVER

环境 : python3.6 / win10 / vs2017 / sqlserver2017一、需要安装的包pymssqlpip install pymssql二、pymssql模块的介绍pymssql 包 有modules:pymssq
2023-01-30

Python Paste 学习笔记

一、写在前面这篇文章主要介绍了Python的Paste库的使用,学习过程中主要参考官网文档以及自己的理解,整理成笔记以便后续自己查阅。 如果转载,请保留作者信息。 邮箱地址:jpzhang.ht@gmail.com Python Pa
2023-01-31

python学习笔记 --- prin

print 输出直接到文件里主要是python版本问题,语法不一样,这里记录一下。python 3.x#!/usr/bin/env python3 #coding:utf-8K = 10f = open("./output/recard"
2023-01-31

Python学习笔记 --- pprin

使用 pprint 模块pprint 模块( pretty printer )用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读).import pprintdata = (
2023-01-31

python——Matplotlib学习笔记

  Matplotlib是pyhon中一个强大的绘图图,可以理解为 MatLab 开源替代,鉴于MatLab的内存之大及安装之复杂,决定先学学Matplotlib这个库。  1Matplotlib的安装  window:  打开cmd,: 
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录