python编写linux脚本_python linux 编写脚本 - CSDN
精华内容
参与话题
  • kafka报警脚本 写在前面的话 本人萌新,发文章一是为了记录自己写的东西,二是为了学习,同时希望能够帮助别人。语法什么的自己觉得也很low,大佬们不喜勿喷。 遇到的问题 1.python如何获取shell命令返回的结果 之前...

    kafka报警脚本

    写在前面的话

    本人萌新,发文章一是为了记录自己写的东西,二是为了学习,同时希望能够帮助别人。语法什么的自己觉得也很low,大佬们不喜勿喷。

    遇到的问题

    1.python如何获取shell命令返回的结果

    之前提到过os.system可以直接执行shell命令,但是无法获取到结果。

    方法一
    result = os.popen('ps -aux')  
          res = result.read()  
          for line in res.splitlines():  
                  print line
    

    使用os.popen可以获取到结果,我使用的是这种方法。

    方法二

    使用commands,不过这种方法在python3中被舍弃了,使用subprocess替代

    import commands
    
    result = commands.getoutput('cmd')   #只返回执行的结果, 忽略返回值.
    result = commands.getstatus('cmd')   #返回ls -ld file执行的结果.
    result = commands.getstatusoutput('cmd') 
    #用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result). cmd执行的方式是{ cmd ; }2>&1, 这样返回结果里面就会包含标准输出和标准错误.
    
    方法三

    使用内置模块subprocess
    详细的解释点这里

    # /usr/bin/python
    # -*- coding: UTF-8 -*-
    import subprocess
    
    group_list = subprocess.Popen("ip a", shell=True)
    print(group_list.stdout.read())
    
    

    在这里插入图片描述
    在使用subprocess.run和subprocess.call的时候提示我这个模块没有这个元素。。。求大佬帮助
    在这里插入图片描述

    2.python怎么进行队列相加(没解决)求大佬帮助

    考虑到了分片,要将所有的加在一起。shell的返回结果是这样的,我需要将第六列相加。由于不会(尴尬,不会你写什么文章)。我直接使用shell的awk获取的最后的值。求大佬指点。。。怎么用python写。

    awk '{#print$6}' | awk '{number+=$1}END{#print number}'
    

    在这里插入图片描述

    3.拼接字符串

    累死了,自己试吧(嘿嘿)

    最终脚本

    # /usr/bin/python
    # -*- coding: UTF-8 -*-
    import os
    
    CURL_ADDRESS = 'https://qyapi.weixin.qq.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    THRESHOLD = 100
    list_1 = []
    list_2 = []
    
    def main():
        res = result()
        get_result_number(res)
        
    def result():
        result = os.popen("/opt/kafka/default/bin/kafka-consumer-groups-scram.sh --list --bootstrap-server a02.firedata.hadoop.datanode:9092 --command-config /opt/kafka/default/config/consumer-scram.properties | grep -v '^anonymous'")
        res = result.read()
        return res
    
    def get_group_number(number):
        group_number = os.popen(
            "/opt/kafka/default/bin/kafka-consumer-groups-scram.sh  --describe --bootstrap-server a02.firedata.hadoop.datanode:9092 --group" + " " + number + " " + "--command-config /opt/kafka/default/config/consumer-scram.properties | awk '{#print$6}' | awk '{number+=$1}END{#print number}'")
        return group_number
    
    def get_markdown_content_1(number_1):
        markdown_content_1 = ">服务名称:""<font color=\\\"info\\\">" + str(number_1) + "</font>\\n>未处理消息数:<font color=\\\"warning\\\">" + str(x) + "</font>\\n"
        return markdown_content_1
    
    def curl_(markdown_content):
        os.system("curl" " " + CURL_ADDRESS + " ""-H 'Content-Type: application/json' -d '{\"msgtype\": \"markdown\",\"markdown\": {\"content\": \"kafka未处理队列超出预定值,请注意。\n" + markdown_content + "\"'")
    
    def get_result_number(res):
        markdown_content = ''
        for i in res.splitlines():
            list_1.append(i)
        j = len(list_1)
    
        for k in range(0, j):
            number = list_1[k]
            group_number = get_group_number(number)
            group_number_all = group_number.read()
    
            for x in group_number_all.splitlines():
                x = int(x)
    
            if x >= threshold:
                list_2.append(x)
                number_1 = list_1[k]
                markdown_content_1 = get_markdown_content_1(number_1)
                markdown_content = str(markdown_content) + str(markdown_content_1)
    
            if len(list_2) > 9:
                curl_(markdown_content)
                markdown_content = ''
                list_2 = []
        if len(list_2) > 0:
            curl_(markdown_content)
    
    if __name__ == '__main__':
        main()
    

    脚本实现效果

    在这里插入图片描述

    展开全文
  • 今天同事叫我编写一个shell脚本。话说,虽然我受*nix的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极。为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没有任何美感可言。...

    今天同事叫我编写一个shell脚本。话说,虽然我受*nix的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极。为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没有任何美感可言。其次是sh脚本的处理能力还是比较弱的,在文本处理、XML处理还有网络编程方面,基本上都要借助于perl,awk等一堆程序。我对这些程序也是不大喜欢的,况且学习第三方软件总要时间,还不如都用python好了。


    那,python可以做shell脚本吗? 首先介绍一个函数:

    os.system(command)

    这个函数可以调用shell运行命令行command并且返回它的返回值。试一下在 python的解释器里输入os.system(”ls -l”),就可以看到”ls”列出了当前目录下的文件。可以说,通过这个函数,python就拥有了shell的所有能力。呵呵。。不过,通常这条命令不需要用到。因为shell常用的那些命令在python中通常有对应而且同样简洁的写法。

    shell中最常用的是ls命令,python对应的写法是:os.listdir(dirname),这个函数返回字符串列表,里面是所有的文件名,不过不包含”.”和”..”。如果要遍历整个目录的话就会比较复杂一点。我们等下再说吧。先在解释器里试一下:

    >>> os.listdir(”/”)

    [’tmp’, ‘misc’, ‘opt’, ‘root’, ‘.autorelabel’, ’sbin’, ’srv’, ‘.autofsck’, ‘mnt’, ‘usr’, ‘var’, ‘etc’, ’selinux’, ‘lib’, ‘net’, ‘lost found’, ’sys’, ‘media’, ‘dev’, ‘proc’, ‘boot’, ‘home’, ‘bin’]

    就像这样,接下去所有命令都可以在python的解释器里直接运行观看结果。

    对应于cp命令的是:shutil.copy(src,dest),这个函数有两个参数,参数src是指源文件的名字,参数dest则是目标文件或者目标目录的名字。 如果dest是一个目录名,就会在那个目录下创建一个相同名字的文件。与shutil.copy函数相类似的是 shutil.copy2(src,dest),不过copy2还会复制最后存取时间和最后更新时间。

    不过,shell的cp命令还可以复制目录,python的shutil.copy却不行,第一个参数只能是一个文件。这怎么办?其实,python还有个shutil.copytree(src,dst[,symlinks]) 。参数多了一个symlinks,它是一个布尔值,如果是True的话就创建符号链接。

    移动或者重命名文件和目录呢?估计被聪明的朋友猜到了,shutil.move(src,dst),呵呵。。与mv命令类似,如果src和dst在同一个文件系统上,shutil.move只是简单改一下名字,如果src和dst在不同的文件系统上,shutil.move会先把src复制到dst,然后删除src文件。看到现在,大多数朋友应该已经对 python的能力有点眉目了,接下来我就列个表,介绍一下其它的函数:

    os.chdir(dirname)
    把当前工作目录切换到dirname下

    os.getcwd()
    返回当前的工作目录路径

    os.chroot(dirname)
    把dirname作为进程的根目录。和*nix下的chroot命令类似

    os.chmod(path,mode)
    更改path的权限位。mode可以是以下值(使用or)的组合:

    os.S_ISUID
    os.S_ISGID
    os.S_ENFMT
    os.S_ISVTX
    os.S_IREAD
    os.S_IWRITE
    os.S_IEXEC
    os.S_IRWXU
    os.S_IRUSR
    os.S_IWUSR
    os.S_IXUSR
    os.S_IRWXG
    os.S_IRGRP
    os.S_IWGRP
    os.S_IXGRP
    os.S_IRWXO
    os.S_IROTH
    os.S_IWOTH
    os.S_IXOTH

    具体它们是什么含义,就不仔细说了,基本上就是R代表读,W代表写,X代表执行权限。USR 代表用户,GRP代表组,OTH代表其它。

    os.chown(path,uid,gid)
    改变文件的属主。uid和gid为-1的时候不改变原来的属主。

    os.link(src,dst)
    创建硬连接

    os.mkdir(path,[mode])
    创建目录。mode的意义参见os.chmod(),默认是0777

    os.makedirs(path,[mode])
    和os.mkdir()类似,不过会先创建不存在的父目录。

    os.readlink(path)
    返回path这个符号链接所指向的路径

    os.remove(path)
    删除文件,不能用于删除目录

    os.rmdir(path)
    删除文件夹,不能用于删除文件

    os.symlink(src,dst)
    创建符号链接

    shutil.rmtree(path[,ignore_errors[,onerror]])

    删除文件夹
    介绍了这么多,其实只要查一下os和shutil两个模块的文档就有了,呵呵。。真正编写 shell脚本的时候还需要注意:

    1.环境变量。python的环境变量保存在os.environ这个字典里,可以用普通字典的方法修改它,使用system启动其它程序的时候会自动被继承。比如:

    os.environ[”fish”]=”nothing”
    不过也要注意,环境变量的值只能是字符串。和shell有些不同的是,python没有 export环境变量这个概念。为什么没有呢?因为python没有必要有:-)

    2.os.path这个模块里包含了很多关于路径名处理的函数。在shell里路径名处理好像不是很重要,但是在python里经常需要用到。最常用的两个是分离和合并目录名和文件名:

    os.path.split(path) -> (dirname,basename)
    这个函数会把一个路径分离为两部分,比如:os.path.split(”/foo /bar.dat”)会返回(”/foo”,”bar.dat”)

    os.path.join(dirname,basename)
    这个函数会把目录名和文件名组合成一个完整的路径名,比如:os.path.join(”/foo”,”bar.dat”)会返回”/foo/bar.dat”。这个函数和os.path.split()刚好相反。

    还有这些函数:

    os.path.abspath(path)
    把path转成绝对路径

    os.path.expanduser(path)
    把path中包含的”~”和”~user”转换成用户目录

    os.path.expandvars(path)
    根据环境变量的值替换path中包含的”$name”和”${name}”,比如环境变量 FISH=nothing,那os.path.expandvars(”$FISH/abc”)会返回”nothing/abc”

    os.path.normpath(path)
    去掉path中包含的”.”和”..”

    os.path.splitext(path)
    把path分离成基本名和扩展名。比如:os.path.splitext(”/foo /bar.tar.bz2″)返回(’/foo/bar.tar’, ‘.bz2′)。要注意它和os.path.split()的区别

    3.在os模块有一个很好用的函数叫os.stat()没有介绍,因为os.path模块里包含了一组和它具有同样功能的函数,但是名字更好记一点。

    os.path.exists(path)
    判断文件或者目录是否存在

    os.path.isfile(
    判断path所指向的是否是一个普通文件,而不是目录

    os.path.isdir(path)

    判断path所指向的是否是一个目录,而不是普通文件

    os.path.islink(path)
    判断path所指向的是否是一个符号链接

    os.path.ismount(path)
    判断path所指向的是否是一个挂接点(mount point)

    os.path.getatime(path)
    返回path所指向的文件或者目录的最后存取时间。

    os.path.getmtime(path)
    返回path所指向的文件或者目录的最后修改时间

    os.path.getctime(path)
    返回path所指向的文件的创建时间

    os.path.getsize(path
    返回path所指向的文件的大小

    4.应用python编写shell脚本经常要用到os,shutil,glob(正则表达式的文件名),tempfile(临时文件),pwd(操作/etc/passwd文件),grp(操作/etc/group文件),commands(取得一个命令的输出)。前面两个已经基本上介绍完了,后面几个很简单,看一下文档就可以了。

    5.sys.argv是一个列表,保存了python程序的命令行参数。其中 sys.argv[0]是程序本身的名字。
    不能光说不练,接下来我们就编写一个用于复制文件的简单脚本。前两天叫我写脚本的同事有个几万个文件的目录,他想复制这些文件到其它的目录,又不能直接复制目录本身。他试了一下”cp src/* dest/”结果报了一个命令行太长的错误,让我帮他写一个脚本。操起python来:
    import sys,os.path,shutil
    for f in os.listdir(sys.argv[1]):
    shutil.copy(os.path.join(sys.argv[1],f),sys.argv[2])

    再试一下linuxapp版里的帖子——把一个文件夹下的所有文件重命名成 10001~10999。可以这样写:
    import os.path,sys
    dirname=sys.argv[1]
    i=10001
    for f in os.listdir(dirname):
    src=os.path.join(dirname,f)
    if os.path.isdir(src):
    continue
    os.rename(src,str(i))

    i =1


    os.chkdir(path)  转换到目录path 下。

    os.system('md a')  可以直接创建目录。

    os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
    ● os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
    ● os.getenv()和os.putenv()函数分别用来读取和设置环境变量。
    ● os.listdir()返回指定目录下的所有文件和目录名。
    ● os.remove()函数用来删除一个文件。
    ● os.system()函数用来运行shell命令。
    ● os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
    ● os.path.split()函数返回一个路径的目录名和文件名。
    >>> os.path.split('/home/swaroop/byte/code/poem.txt')
    ('/home/swaroop/byte/code', 'poem.txt')
    ● os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,os.path.exists()函数用来检验给出的路径是否真地存在。

     文件重定向

           已有PY文件new1.py ,在命令行下输入:new1>new.txt 可以将new1运行的结果输出到文件new.txt,这称为流重定向。


    展开全文
  • python编写脚本工具

    2020-07-30 23:33:25
    主要用来编写pyhton的脚本工具,python使用c或C++的编写工具编译容易导致语法错误,所以python脚本最好使用python的专用编辑器来编写
  • Python 实现 Shell 脚本功能

    千次阅读 2018-05-15 14:13:04
    由于进程日志中已有任务数量的输出,故只需要编写一个脚本读取日志中的任务数量,发现任务数量超过某个阈值就发送告警短信即可。 本想使用 Shell 脚本来实现,没想到 Shell 的语法实在不好掌握,赋值语法,数值比较...

    最近生产环境上发现有服务器进程出现任务堆积的情况,由于一时无法定位出原因,故对堆积的任务数量进行监控。进程日志中已有任务数量的输出,故只需要编写一个脚本读取日志中的任务数量,发现任务数量超过某个阈值就发送告警短信即可。
    本想使用 Shell 脚本来实现,没想到 Shell 的语法实在不好掌握,赋值语法,数值比较语法,字符串与数字的转换,等等,这些语法的问题经过了多次 google 和百度后,还是没能解决:(。一气之下,决定还是用回了自己熟悉的 Python 来实现。

    Python 中执行 Shell 命令有多种方法,stackoverflow 上有对这些方法进行比较的讨论,Calling an external command in Python 指出使用subprocess模块来实现更优。因此,本文说明如何使用subprocess模块来实现 Shell 脚本的功能。
    subprocess模块提供多种方法来实现执行 Linux 的命令,例如subprocess.call()方法,subprocess.check_call()方法,等。这些方法都是对Popen类的封装,故本文着重讲述Popen类的使用。

    执行 Shell 命令

    可以通过向Popen()传递需要执行的命令来创建一个Popen对象,这样,便会创建一个子进程来执行命令。例如:

    child = subprocess.Popen(["ping","-c","5","leehao.me"])

    上面的代码会创建一个子进程来执行ping -c 5 leehao.me命令,这个命令采用列表的形式传递给Popen()方法。如果我们想直接采用ping -c 5 leehao.me字符串形式,可以添加shell=True来实现:

    child = subprocess.Popen("ping -c 5 leehao.me", shell=True)

    官方文档指出由于安全原因故不建议使用shell=True,详细说明可以参考官方文档的描述。

    等待子进程执行

    子进程执行命令后,主进程并不会等待子进程执行。为了让主进程等待子进程执行结束,需要显示调用Popen.wait()方法。例如:

    child = subprocess.Popen(["ping","-c","5","leehao.me"])
    child.wait()
    print 'parent finish'

    这样,主进程会等待子进程执行ping命令完毕后,才会打印出parent finish的输出。

    获取执行结果

    为了获取Popen()子进程的输出,可以使用Popen.communicate()方法,例如:

    def subprocess_cmd(command):
        process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
        proc_stdout = process.communicate()[0].strip()
        print proc_stdout
    
    subprocess_cmd('echo leehao.me; echo www.leehao.me')

    输出:

    leehao.me
    www.leehao.me

    process.communicate()方法可以实现主进程与子进程的通信。主进程可以通过它向子进程发送数据,也可以读取子进程的输出的数据。上面的例子中,我们在创建Popen对象时指定stdout=subprocess.PIPE,这样主进程便可以读取子进程的输出。
    communicate()方法返回一个元组:(stdoutdata, stderrdata)process.communicate()[0]即获取子进程的标准输出。
    需要指出的是,调用communicate()方法后,主进程也会等待子进程执行完毕。
    上面的例子中,子进程向标准输出打印两个字符串,主进程接收到了这些输出,并打印出来。

    有了上面的基础,实现我们的监控脚本就易如反掌了,下面是我们的脚本代码。为了免受骚扰,将手机号码替换了:)

    附:监控脚本

    from datetime import datetime
    import subprocess
    
    
    def safe_int(s):
        try:
            n = int(s)
        except Exception, ex:
            n = 0
        return n
    
    
    def run():
        print 'begin to monitor task num, time: %s' % datetime.now()
        child = subprocess.Popen('grep "socket进入队列" /home/lihao/logs/ksb.txt | tail -n 1 | cut -d ":" -f 3',
                                 shell=True, stdout=subprocess.PIPE)
        out = child.communicate()[0]
        out = out.strip()
        print(out)
        num = safe_int(out)
        if num > 5:
            print 'task num is over limit, num: %s, time: %s' % (num, datetime.now())
            msg = '%s, 193 task num is over limit, task num: %s' % (datetime.now(), num)
            cmd = ['/home/soft/SendMsg/SendMsg', '1', '13800138000', msg]
            print cmd
            child = subprocess.Popen(cmd, cwd="/home/soft/SendMsg")
            child.wait()
        else:
            print 'task num is ok, num: %s, time: %s' % (num, datetime.now())
    
    
    if __name__ == '__main__':
        run()

    参考资料

    1. https://docs.python.org/2/library/subprocess.html
    2. http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html
    3. https://stackoverflow.com/questions/17742789/running-multiple-bash-commands-with-subprocess
    4. http://blog.51cto.com/zhou123/1312791
    5. https://stackoverflow.com/questions/89228/calling-an-external-command-in-python
    展开全文
  • Linux平台下Python脚本编程入门(一)

    万次阅读 2018-05-07 10:26:53
    原文地址:http://developer.51cto.com/art/201608/516305.htm众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么...首先,我们会使用 Python 的命令行工具,还会接触到 Python 的面...

    原文地址:http://developer.51cto.com/art/201608/516305.htm


    众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写。大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会给你带来一些其它的好处。

    首先,我们会使用 Python 的命令行工具,还会接触到 Python 的面向对象特性(这篇文章的后半部分会谈到它)。

    学习 Python 可以助力于你在桌面应用开发及数据科学领域的职业发展。

    容易上手,广泛使用,拥有海量“开箱即用”的模块(它是一组包含 Python 语句的外部文件),Python 理所当然地成为了美国计算机专业大学生在一年级时所上的程序设计课所用语言的不二之选。

    在这个由两篇文章构成的系列中,我们将回顾 Python 的基础部分,希望初学编程的你能够将这篇实用的文章作为一个编程入门的跳板,和日后使用 Python 时的一篇快速指引。

    Linux 中的 Python

    Python 2.x 和 3.x 通常已经内置在现代 Linux 发行版中,你可以立刻使用它。你可以终端模拟器中输入 python 或 python3 来进入 Python shell, 并输入 quit() 退出。

    1. $ which python 
    2. $ which python3 
    3. $ python -v 
    4. $ python3 -v 
    5. $ python 
    6. >>> quit() 
    7. $ python3 
    8. >>> quit() 

    在 Linux 中运行 Python 命令

    如果你希望在键入 python 时使用 Python 3.x 而不是 2.x,你可以像下面一样更改对应的符号链接:

    1. $ sudo rm /usr/bin/python  
    2. $ cd /usr/bin 
    3. $ ln -s python3.2 python # Choose the Python 3.x binary here 


    删除 Python 2,使用 Python 3

    顺便一提,有一点需要注意:尽管 Python 2.x 仍旧被使用,但它并不会被积极维护。因此,你可能要考虑像上面指示的那样来切换到 3.x。2.x 和 3.x 的语法有一些不同,我们会在这个系列文章中使用后者。

    另一个在 Linux 中使用 Python 的方法是通过 IDLE (Python 集成开发环境(the Python Integrated Development Environment)),这是一个为编写 Python 代码而生的图形用户界面。在安装它之前,你最好查看一下适用于你的 Linux 发行版的 IDLE 可用版本。

    1. # aptitude search idle     [Debian 及其衍生发行版] 
    2. # yum search idle          [CentOS 和 Fedora] 
    3. # dnf search idle          [Fedora 23+ 版本] 

    然后,你可以像下面一样安装它:

    1. $ sudo aptitude install idle-python3.2    # I'm using Linux Mint 13 

    安装成功后,你会看到 IDLE 的运行画面。它很像 Python shell,但是你可以用它做更多 Python shell 做不了的事。

    比如,你可以:

    1. 轻松打开外部文件 (File → Open);

    Python Shell

    复制 (Ctrl + C) 和粘贴 (Ctrl + V) 文本;查找和替换文本;显示可能的代码补全(一个在其他 IDE 里可能叫做“智能感知”或者“自动补完”的功能);更改字体和字号,等等。

    最厉害的是,你可以用 IDLE 创建桌面应用。

    我们在这两篇文章中不会开发桌面应用,所以你可以根据喜好来选择 IDLE 或 Python shell 去运行下面的例子。

    Python 中的基本运算

    就像你预料的那样,你能够直接进行算术操作(你可以在你的所有运算中使用足够多的括号!),还可以轻松地使用 Python 拼接字符串。

    你还可以将运算结果赋给一个变量,然后在屏幕上显示它。Python 有一个叫做拼接 (concatenation) 的实用功能——给 print 函数提供一串用逗号分隔的变量和/或字符串,它会返回一个由你刚才提供的变量依序构成的句子:

    1. >>> a = 5 
    2. >>> b = 8 
    3. >>> x = b / a 
    4. >>> x 
    5. 1.6 
    6. >>> print(b, "divided by", a, "equals", x) 

    注意,你可以将不同类型的变量(数字,字符串,布尔符号等等)混合在一起。当你将一个值赋给一个变量后,你可以随后更改它的类型,不会有任何问题(因此,Python 被称为动态类型语言)。

    如果你尝试在静态类型语言中(如 Java 或 C#)做这件事,它将抛出一个错误。

    学习 Python 的基本操作

    面向对象编程的简单介绍

    在面向对象编程(OOP)中,程序中的所有实体都会由对象的形式呈现,并且它们可以与其他对象交互。因此,对象拥有属性,而且大多数对象可以执行动作(这被称为对象的方法)。

    举个例子:我们来想象一下,创建一个对象“狗”。它可能拥有的一些属性有颜色、品种、年龄等等,而它可以完成的动作有 叫()、吃()、睡觉(),诸如此类。

    你可以看到,方法名后面会跟着一对括号,括号当中可能会包含一个或多个参数(向方法中传递的值),也有可能什么都不包含。

    我们用 Python 的基本对象类型之一——列表来解释这些概念。

    解释对象的属性和方法:Python 中的列表

    列表是条目的有序组合,而这些条目所属的数据类型并不需要相同。我们像下面一样来使用一对方括号,来创建一个名叫 rockBands 的列表:

    你可以向 rockBands 的 append() 方法传递条目,来将它添加到列表的尾部,就像下面这样:

    1. >>> rockBands = [] 
    2. >>> rockBands.append("The Beatles"
    3. >>> rockBands.append("Pink Floyd"
    4. >>> rockBands.append("The Rolling Stones"

    为了从列表中移除元素,我们可以向 remove() 方法传递特定元素,或向 pop() 中传递列表中待删除元素的位置(从 0 开始计数)。

    换句话说,我们可以用下面这种方法来从列表中删除 “The Beatles”:

    1. >>> rockBands.remove("The Beatles"

    或者用这种方法:

    1. >>> rockBands.pop(0) 

    如果你输入了对象的名字,然后在后面输入了一个点,你可以按 Ctrl + space 来显示这个对象的可用方法列表。

    列出可用的 Python 方法

    列表中含有的元素个数是它的一个属性。它通常被叫做“长度”,你可以通过向内建函数 len 传递一个列表作为它的参数来显示该列表的长度(顺便一提,之前的例子中提到的 print 语句,是 Python 的另一个内建函数)。

    如果你在 IDLE 中输入 len,然后跟上一个不闭合的括号,你会看到这个函数的默认语法: 

    Python 的 len 函数

    现在我们来看看列表中的特定条目。它们也有属性和方法吗?答案是肯定的。比如,你可以将一个字符串条目转换为大写形式,并获取这个字符串所包含的字符数量。像下面这样做:

    1. >>> rockBands[0].upper() 
    2. 'THE BEATLES' 
    3. >>> len(rockBands[0]) 
    4. 11 

    总结

    在这篇文章中,我们简要介绍了 Python、它的命令行 shell、IDLE,展示了如何执行算术运算,如何在变量中存储数据,如何使用 print 函数在屏幕上重新显示那些数据(无论是它们本身还是它们的一部分),还通过一个实际的例子解释了对象的属性和方法。

    下一篇文章中,我们会展示如何使用条件语句和循环语句来实现流程控制。我们也会解释如何编写一个脚本来帮助我们完成系统管理任务。

    你是不是想继续学习一些有关 Python 的知识呢?敬请期待本系列的第二部分(我们会在脚本中将 Python 和命令行工具的优点结合在一起),你还可以考虑购买我们的《终极 Python 编程》系列教程(这里有详细信息)。

    像往常一样,如果你对这篇文章有什么问题,可以向我们寻求帮助。你可以使用下面的联系表单向我们发送留言,我们会尽快回复你。

    Linux 平台下 Python 脚本编程入门(二)

    【编辑推荐】

    展开全文
  • 系统操作 ...Linux为’posix’ os.getenv(环境变量名称) 读取环境变量 os.getcwd() 获取当前路径 In [10]: import os In [11]: os.sep Out[11]: '/' In [12]: os.name Out[12]: 'posix' In [13]...
  • 想要在linux环境下编写可执行的脚本,但是直接在linux环境下通过创建文本的方式进行编写没有命令提示符也不会提醒你编写的格式,如果想要编写脚本时有类似pycharm的提示,同时能让脚本直接在linux环境下运行,请问...
  • Linux下vim编写python脚本一键运行

    千次阅读 2018-09-27 09:21:01
    Linux下,常常使用vim来编写脚本,但是每次编写完成后要退出再运行:python xxx.py才可以测试脚本,可在vim的配置文件中添加一些配置,即可编写脚本后不用退出即可验证脚本的正确性(一键执行)。 vim编辑器的...
  • 我们在编写python脚本时候有时候希望将脚本作为服务运行在后台,这样再离开终端的时候程序可以正常运行。 这里推荐一种比较方便的命令可以使得脚本后台运行: nohup python filename.py &amp; 参数说明:...
  • Linux下开机启动python脚本详解

    千次阅读 2018-09-12 14:07:13
    应用场景: 最近在服务器上部署一些脚本,需要让其随服务器开机启动,于是研究了一下,begin . . . 解决方法: 1. 先准备好需要开机启动的脚本 /root/.../usr/local/bin/python3 /root/test/qin.py &gt; /roo...
  • LinuxPython脚本自启动和定时启动

    万次阅读 2018-01-29 11:51:39
    一、Python开机自动运行 自启动脚本为auto.py 用root权限编辑以下文件 sudo vim /etc/rc.local 在exit 0上面编辑启动脚本的命令 /usr/bin/python3 /home/edgar/auto.py > /home/edgar/auto.log 最后重启Linux,...
  • Linux上如何测试、运行python脚本

    万次阅读 2017-06-02 18:37:13
    有两种方式:1、直接使用python xxxx.py执行。其中python可以写成python的绝对路径。使用which python进行查询。2、在文件的头部(第一行)写上#!/usr/bin/python2.7,这个...因为在linux中,python啊shell这些程序都是
  • Python 脚本的三种执行方式

    万次阅读 2020-01-08 11:03:09
    1.交互模式下执行 Python,这种模式下,无需创建脚本文件,直接在 Python解释器的交互模式下编写对应的 Python 语句即可。 1)打开交互模式的方式: Windows下: 在开始菜单找到“命令提示符”,打开,就进入到...
  • python脚本当作Linux中的服务启动

    千次阅读 2016-03-03 21:34:31
    脚本服务化目的:python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据。但是网上买的服务器会不定时进行维护,服务器会被重启。...1,给编写好的python脚本开头加上 #!/usr/bi
  • 编写shell脚本运行python文件

    千次阅读 2019-05-24 14:03:38
    1、给指定的sh文件授权 2、在该.sh文件中直接写运行python的语句 3、执行该.sh文件即可
  •  用python解释器来执行python脚本,在windows下面python解释器是python.exe,我的python文件安装在D:\Python27,在这个目录下可以看到python解释器。 完整的命令应该是: python解释器 .py文件 解释器和py
  • 编写shell脚本运行python程序

    千次阅读 2019-01-09 09:59:05
    https://www.jianshu.com/p/b1a8264c2043
  • linux下同时运行多个python脚本

    万次阅读 2018-09-18 10:57:20
    python mysql.py &gt; /dev/null 2&gt;&amp;1 &amp; python mysql1.py &gt; /dev/null 2&gt;&amp;1 &amp; python mysql2.py &gt; /dev/null 2&gt;&amp;1 &amp; ...
  • python脚本(test.py)中 import sys print(sys.argv[1]) print(sys.argv[2]) #输出 1 2 2. 传递变量名 shell中 #bash中定义变量,注意等号间不能有空格 a = 2 b = "test" python test.py $a $b ....
  • 原文地址:... Linux下执行.sh脚本错误:bin/sh^M: bad interpreter: No such file or directory 同样的python文件也是,即使在scripts开头指定了运行程序! 原因是脚本是在windows系统下编写的。...
1 2 3 4 5 ... 20
收藏数 57,450
精华内容 22,980
关键字:

python编写linux脚本