zoukankan      html  css  js  c++  java
  • Python文件_管道与模块编写

    一,管道(pipe)

    大多数操作系统都提供了一个命令行接口,即【shell】。

    在 shell 下能够启动的所有程序,也都可以在 Python 中启动,这要用到一个 pipe 对象,这个直接翻译意思为管道的对象,可以理解为 Python 与操作系统的 Shell 进行通信的途径,一个 pipe 对象就代表了一个运行的程序。

    1.比如Unix 的 ls -l 命令通常会用长文件名格式来显示当前目录的内容,而在 Python 中就可以用 os.open 来启动它:

    >>> import os

    >>> cmd = 'ls -l'

    >>> fp = os.popen(cmd)

    参数 cmd 是包含了 shell 命令的一个字符串。返回的结果是一个对象,用起来就像是一个打开了的文件一样。

    2.我们还可以读取ls 进程的输出,用 readline 的话每次读取一行,用 read 的话就一次性全部读取:

    >>> res = fp.read()

    用完之后要关闭,这点也跟文件一样:

    >>> stat = fp.close()

    >>> print(stat)

    None

    返回值是 ls 这个进程的最终状态;None 的意思就是正常退出(没有错误)。

    2.md5sum函数可以很有效地检查两个文件是否有相同内容。我们可以用一个 pipe 来从 Python 启动运行 md5sum,然后获取结果:

    $ cat c.py

    #!/bin/python

    import os

    filename = 'output.txt'

    cmd = 'md5sum ' + filename       #注意,md5sum后面有个空格

    fp = os.popen(cmd)

    res = fp.read()

    stat = fp.close()

    print(res)

    print(stat)

    二,模块编写

    任何包含 Python 代码的文件都可以作为模块被导入使用。

    1.看个例子,创建一个名字叫wc.py 的文件,里面代码如下:

    $ cat wc.py

    #!/bin/python

    def linecount(filename):

        count = 0

        for line in open(filename):

            count += 1

        return count

    print(linecount('wc.py'))

    如果运行这个程序,程序就会读取自己本身wc.py,然后输出文件中的行数,也就是7行了:

    $ python3 wc.py

    7

    你还可以导入这个模块:

    >>> import wc        #这里的模块名称wc是follow文件名wc.py而来

    7

    现在你就有一个模块对象 wc 了:

    >>> wc

    <module 'wc' from '/Users/dianze/python/wc.py'>

    而该模块的功能之一是提供了数行数的函数linecount:

    >>> wc.linecount('wc.py')

    9

    >>> wc.linecount('output.txt')

    1

    这就是用Python来写模块。

    2.上例中有个小问题,就是导入模块的时候,模块内代码在最后一行对自身进行了测试。一般情况你导入一个模块,模块只是定义了新的函数,但不会去主动运行自己内部的函数。

    所以,以模块方式导入使用的程序,一般用下面这样的惯用形式:

    if __name__ == '__main__':

       print(linecount('wc.py'))

    name 是一个内置变量,当程序开始运行的时候被设置。如果程序是作为脚本来运行的,name 的值就是'main'。

    这样的话,if条件满足,测试代码就会运行;而如果该代码被用作模块导入了,if 条件不满足,测试的代码就不会运行了。

    结束。  

  • 相关阅读:
    maven mirrorOf
    使用nexus 搭建本地 maven 服务器
    django 访问静态资源
    django 异常问题总结
    django导入 views.py
    vue js 实现 树形菜单
    vue.js 基础
    css之margin
    Vue项目笔记
    eslint ":"号
  • 原文地址:https://www.cnblogs.com/liusingbon/p/13221518.html
Copyright © 2011-2022 走看看