• 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 条件不满足,测试的代码就不会运行了。

    结束。  

  • 相关阅读:
    linux卸载mysql,apache,php
    iOS 秒数转换成时间,时,分,秒
    iOS 正则表达式判断邮箱、身份证..是否正确
    ios 删除系统从相册压缩的视频
    iOS 视频选择压缩
    iOS 从相册中拿到 图片名 ,截取后缀,图片名
    ios 根据颜色生成图片,十六进制颜色。
    ios 友盟第三方登录遇到的各种坑。
    项目适配iOS9遇到的一些问题及解决办法 ,以及URL 白名单配置方法
    ios 设置head请求头,自定义head, read response header
  • 原文地址:https://www.cnblogs.com/liusingbon/p/13221518.html
Copyright © 2020-2023  润新知