精华内容
下载资源
问答
  • 尝试自己编写一个简单脚本。 1 背景介绍 每次发布tomcat项目的时候都要反复敲一些命令,重启tomcat之前先检查tomcat进程有没有停掉,没有还要手动kill该进程,单独部署一个项目还好,如果一次多个部署,就比较费劲了...

    1 背景介绍
    每次发布tomcat项目的时候都要反复敲一些命令,重启tomcat之前先检查tomcat进程有没有停掉,没有还要手动kill该进程,单独部署一个项目还好,如果一次多个部署,就比较费劲了

    2.知识剖析
    2.1什么是shell脚本
    Shell Script [1] ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

    2.2shell的基本语法(具体参考http://www.runoob.com/linux/linux-shell.html)
    1.echo 命令用于向窗口输出文本
    2.定义变量:your_name=“runoob.com”,war= 1 , d i r = " / r o o t / d e p l o y W a r / 1,dir="/root/deployWar/ 1,dir="/root/deployWar/{war}
    3.if语句:跟java里面差不多,但是有一点要注意。
    if 语句语法格式:

     if condition
        then
            command1 
            command2
            ...
            commandN 
        fi
    

    注:这个格式下一定注意后面必须有fi
    3.常见问题
    1)什么是shell脚本?
    2)怎么写一个简单的脚本?
    3)部署脚本是什么?

    4.解决方案:
    掌握基本shell语法,和写代码一样,通过一些逻辑来运算一些命令达到相应的目的。

    5.编码实战
    使用方法,将两个shell脚本置于tomcat的bin目录下,chmod +x 为两个脚本给上可执行权限,直接用./deploy.sh或./restart.sh执行即可。具体实现功能:1.deploy.sh首先删除webapps目录下项目war包(tomcat会自动删除war包解压出来的文件夹)。2.shutdown关闭tomcat,如若3s后还未关闭使用kill -9 杀死该进程。3.将已上传到指定位置的war包部署到tomcat并通过restart.sh重启tomcat。下面附上代码:deploy.sh

    #!/bin/sh
    war=$1
    dir="/root/deployWar/${war}"
    echo "-------project file:${dir}-------"
    bin=$(cd `dirname $0`; pwd)
    echo "-------current directory ${bin}--------"
    if [ ! -n "${war}" ]; then
    	echo "-------Usage: $0 [project.war]-------"
    	exit 0
    fi
    if [ ! -f "${dir}" ]; then
    	echo "-------Error: ${dir} does not exist.--------"
    	exit 0
    fi
    if [ ! "${war##*.}" ="war" ]; then
    	echo "-------Error:${war} is not a war file.--------"
    	exit 0
    fi
    echo "-------Deploy ${war##*/}...-------"
    if [ -f "${bin}/../webapps/${war}" ]; then
    	rm -rf ${bin}/../webapps/${war}
    	echo "-------delete: ${bin}/../webapps/${war}------"
    fi
    cp -f ${dir} ${bin}/../webapps/
    echo "Restart tomcat..."
    exec ${bin}/restart.sh
    

    restart.sh文件内容:

    #!/bin/sh
    
    bin=$(cd `dirname $0`; pwd)
    pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
    
    if [ -n "${pid}" ]; then
    	echo "Shutdow...."
    	sh ${bin}/shutdow.sh
    	sleep 3
    	
    	pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
    	if [ -n "${pid}" ]; then
    		kill -9 &{pid}
    		slepp 1
    	fi
    fi
    echo "Startup..."
    sh ${bin}/startup.sh
    if [ "$1" = "-v" ]; then
    	tail -f ${bin}/../logs/catalina.out
    fi
    

    6.扩展思考:
    怎么样一键部署不同的服务等一些功能,比如:一键部署到指定的rensin,jetty,tomcat。
    7.参考文献
    CSDN、百度百科,https://blog.csdn.net/qq_38439885/article/details/79993389?utm_source=copy

    8 更多讨论
    总结:
    1))什么是shell脚本?
    就是通过一些shell语法和逻辑处理,把一些liunx的命令组合在一起去完成特定的功能。
    2)怎么写一个简单的脚本?
    掌握基本shell语法,和写代码一样,通过一些逻辑来运算一些命令达到相应的目的。
    3)部署脚本是什么?
    部署脚本,就是一键把指定文件夹下的war包部署到tomcat的上。

    温馨提示:本人初学java者,如有不对敬请指出,谢谢!

    展开全文
  • 尝试自己编写一个简单脚本 1.背景介绍 Shell是什么? Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。 Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和...

     

    大家好,
    今天给大家分享一下可能会使用到的知识点:

     如何写shell脚本?尝试自己编写一个简单脚本

     

     

     

    1.背景介绍

     

    Shell是什么?

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。

    Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

     

     

    2.知识剖析

    Shell有两种执行命令的方式:

    •交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。

    •批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。

    Shell是一种脚本语言(即解释型语言),必须有解释器来执行这些脚本。

    bash:bash是Linux系统默认使用的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。

    ash:ash shell 是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。

    sh:sh 由Steve Bourne开发,是Bourne Shell的缩写,各种UNIX系统都配有sh。

    3.常见问题

    语法都正确但是运行报错

     

    4.解决方案

    设置文件格式为Unix :set fileformat=unix

     

    5.编码实战

    这里主要通过实现几个小功能来间接体会shell的使用:

    统计访问多的ip

     

    为了对Nginx日志文件里访问ip数和响应时间进行分析,需要学习shell脚本和一些命令的语法。

    这里主要是通过Nginx的logs/access.log里的记录来分析,因为用户每一次访问都会在这里生成日志。

    我们到达该目录下,执行cat access.log 可以看到里面所有日志

     

    它们按照下面的格式排列

    #设定日志格式,其中upstream_response_time是响应时间,request_time是请求时间

     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '

                          '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';

    执行 cat access.log | awk '{print $1}' ,将上面数据第一列显示,也就是只显示ip。这条指令等价于awk '{print $1}'  access.log;

    执行awk '{print $NF}'  access.log | sort ,

    sort:会将 文件/文本 的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

    注意到上面的参数换成了$NF,它指每一行最后一个字段,最后一个字段是响应时间,这样就得到了响应时间的升序排列。(因为我的日志了ip太少,对ip排序效果不明显)


     

    我上面只是对大量输出结果的少量截取,其实有很多重复的。

    执行  awk '{print $NF}' access.log|sort| uniq -c

    uniq会对前面的结果去重,加上 -c会在这一列前面显示它重复的次数,如上图。

    其实我的目的是统计访问最多的ip,只是因为ip太少这里用响应时间来充当ip,那么可以对上面的结果安照重复出现的次数进行升序排序,awk '{print $NF}' access.log|sort| uniq -c | sort -n

    加上 sort 后的 -n 表示按照数值的大小进行排序,如果不加,效果是以下:

    可以看出它是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。这样显然不符合我们的需求。

    好,用上awk '{print $NF}' access.log|sort| uniq -c | sort -n ,得到了按照访问量的升序排序(假设它是ip)。但是我们希望一降序形式展示这样可以直观的看出访问量最多的那个。那么在先前的基础上加上 -r就可以了 。

    总结:

    在sort里:

    # -n是按照数字大小排序,-r是以相反顺序,-k是指定需要排序的栏位。

    所以最终:

    awk '{print $NF}' access.log|sort| uniq -c | sort -n -k 1 -r |more

    more : 分页查看文件内容。 如果内容不多,可以去掉它。

     

     

    6.扩展思考

    $0 、$1-$n   的使用

     

     

    7.参考文献

    http://man.linuxde.net/read (Linux命令大全)

     

     

     

     

    展开全文
  • 手把手之如何写一个抢课脚本

    万次阅读 多人点赞 2021-03-03 14:51:53
    大家好,我是菜鸡q,大家好久不见!故事的起因是由于群里有人通知马上要选下学期的课了,鉴于第学期立志认真上课的我头铁选了几门巨难的课后,到学期中由于真的听不懂后索性懒得去上课,所以我决定下...

    大家好,我是菜鸡q,大家好久不见!

    故事的起因是由于群里有人通知马上要选下学期的课了,鉴于第一学期立志认真上课的我头铁选了几门巨难的课后,到学期中由于真的听不懂后索性懒得去上课,所以我决定下学期就选几门水课!

    经过多方打听,水课名单get后,我定好下午三点的闹钟,摩拳擦掌准备抢课。

    结局当然是:秒杀从未成功的我,失败次数++

    痛定思痛,咱一个计算机科班的写个抢课脚本他不香吗?

    有关注茅台的朋友们也许了解到最近火爆的京东抢茅台脚本在github上异军突起,那么今天让我们一起看下此类秒杀脚本背后的原理吧。

    我们先说结论:本质上就是模拟一个请求,举个例子,我们在百度上搜索关键词,如在百度搜索框上输入【NBA】,则浏览器会将我们的请求(带有关键词NBA)发到百度服务器,服务器拿到关键词后,返回给所有带有NBA信息的搜索结果。

    同样的,当我们在秒杀茅台页面点击购买,在选课页面点击选课,都是将带有特定功能的数据包发到对方服务器,随后得到反馈:秒杀成功。

    当然机智的你一定会有疑问,京东的服务器是怎么知道这个商品是你买的呢?

    答案就是我们平常发过去的数据包里有个信息叫cookie,经过层层加密后他会带有我们的个人信息,这样服务器拿到cookie后对应解密就能分辨请求是谁发的了。

    那么回到主题,如何写一个抢课脚本呢?

    • 通过抓包工具找到我们抢课的请求接口

    • 用python的requests库发送该请求

    具体操作如下

    打开浏览器F12,随便选个课,点击选课,抓到包如下:

    将url以及headers复制进脚本,随后伪代码如下:

    import requests
    data = requests.post(url, headers=headers)
    

    好了,经过一番操作后,我已经将脚本部署上就等哪个老哥退课了。

    本文的源代码已上传到GitHub, 点击阅读原文一键直达~

    ——END——
    

    扫码二维码

    获取更多精彩

    老肥码码码

    展开全文
  • Python 脚本编写

    万次阅读 多人点赞 2018-07-14 19:50:05
    运行和修改 Python 脚本 与用户输入交互 处理异常 读写文件 导入本地、标准和第三方模块 在解释器中进行实验 安装 Python 检查计算机是否安装了 Python ? 在终端窗口输入如下指令,并按回车 python --...

    学习内容:

    • Python 安装和环境设置
    • 运行和修改 Python 脚本
    • 与用户输入交互
    • 处理异常
    • 读写文件
    • 导入本地、标准和第三方模块
    • 在解释器中进行实验

    安装 Python

    检查计算机是否安装了 Python ?

    在终端窗口输入如下指令,并按回车

    python --version

    系统可能会显示已安装的 Python 版本是 Python 2.7.9。在这种情况下,表明你已经安装了 Python 2。如果版本号以 3 开头,则表明你已经安装了 Python 3!请勿再次安装 Python!

    下载/安装 Anaconda

    如果你对数据科学方面的 Python 感兴趣,强烈建议安装Anaconda,即使你已经在计算机上安装了 Python。

    Anaconda 和 Jupyter notebook 已经成为数据分析的标准环境。简单来说,Anaconda是包管理器和环境管理器,Jupyter notebook 可以将数据分析的代码、图像和文档全部组合到一个web文档中。

    Anaconda 安装教程

    下载/安装 Python

    Python 下载,找到适用于你的操作系统、下载 3 开头的最新版本。

    如果你使用的是 Windows 设备,确保在安装过程中选中 Add Python 3.5 to PATHAdd Python to environment variables 选项,这样可以确保从命令行提示符窗口中访问 Python。

    如果你使用的是 Windows 设备,并且已经安装了 Python,但是未选中上述选项,则需要将 Python 添加到 PATH。这样的话,当你输入 python 时,可以告诉命令行运行 Python 3。如果你未选中上述选项,或者转到下一阶段时似乎不可行,请按照 Python 文档中的这些说明将 Python 添加到 PATH。

    运行 Python 脚本

    将 Python3 下载并配置好后,在终端窗口检查是否配置成功

    ...$ python --version
    Python 3.6.6 :: Anaconda custom (64-bit)

    在终端窗口使用 cd 命令转到包含 .py 的 python 文件目录,运行该文件,查看结果

    ...$ cd ..
    ...$ cd /udacity/python
    ...$ ls
    first_script.py untitled.py
    ...$ python first_script.py
    Congratulations on running this script!!

    配置 Python 编程环境

    推荐的文本编辑器

    下载并安装好后,需要将我们新下载的 Python3 与 Sublime 编辑器关联。可以参考文章 Mac下Sublime Text3配置Python3开发环境

    内置函数 input()

    我们可以使用内置函数 input 获取用户的原始输入,该函数接受一个可选字符串参数,用于指定在要求用户输入时向用户显示的消息。

    name = input("Enter your name: ")
    print("Hello there, {}!".format(name.title()))

    input 函数获取用户输入的任何内容并将其存储为字符串。如果你想将输入解析为字符串之外的其他类型,例如整数(如以下示例所示),需要用新的类型封装结果并从字符串转换为该类型。

    num = int(input("Enter an integer"))
    print("hello" * num)

    我们还可以使用内置函数 eval 将用户输入解析为 Python 表达式。该函数会将字符串评估为一行 Python 代码

    result = eval(input("Enter an expression: "))
    print(result)
    # 输出
    ...$ python untitled.py
    Enter an expression: 3*2 
    6

    示例

    1. 请求用户输入三次。一次是名字列表,一次是未交作业数量列表,一次是分数列表。使用该输入创建 namesassignmentsgrades 列表。
    2. 使用循环为每个学生输出一条信息并包含正确的值。潜在分数是 2 乘以未交作业数加上当前分数。
    names = (input("Enter names separated by commas: ")).split(",")
    assignments = ((input("Enter assignment counts separated by commas: "))).split(",")
    grades = ((input("Enter grades separated by commas: "))).split(",")
    
    result = """
    Hi {},\n\nThis is a reminder that you have {} assignments left to \
    submit before you can graduate. Your current grade is {} and can increase \
    to {} if you submit all assignments before the due date.\n\n 
    """
    
    for name, assignment, grade in zip(names, assignments, grades):
        print(result.format(name, assignment, grade, 2*int(assignment)+int(grade) ))
    # 命令窗口输入输出
    ...$ python untitled.py
    Enter names separated by commas: Chandler bing,Phoebe Buffay,Monica Geller,Ross Geller
    Enter assignment counts separated by commas: 3,6,0,2
    Enter grades separated by commas: 81,77,92,88
    
    Hi Chandler bing,
    
    This is a reminder that you have 3 assignments left to submit before you can graduate. Your current grade is 81 and can increase to 87 if you submit all assignments before the due date.
    
    Hi Phoebe Buffay,
    
    This is a reminder that you have 6 assignments left to submit before you can graduate. Your current grade is 77 and can increase to 89 if you submit all assignments before the due date.
    
    Hi Monica Geller,
    
    This is a reminder that you have 0 assignments left to submit before you can graduate. Your current grade is 92 and can increase to 92 if you submit all assignments before the due date.
    
    Hi Ross Geller,
    
    This is a reminder that you have 2 assignments left to submit before you can graduate. Your current grade is 88 and can increase to 92 if you submit all assignments before the due date.   

    错误与异常

    • 错误,当 Python 无法解析代码时,就会发生语法错误,因为我们没有遵守正确的 Python 语法。当你出现拼写错误或第一次开始学习 Python 时,可能会遇到这些错误。
    • 异常,当在程序执行期间出现意外情况时,就会发生异常,即使代码在语法上正确无误。Python 有不同类型的内置异常,你可以在错误消息中查看系统抛出了什么异常。

    如果你没有使用正确的语法,并且 Python 不知道如何运行你的代码,会发生语法错误。

    如果 Python 在执行代码时遇到意外情形,会发生异常,即使你采用了正确的语法,也可能会发生异常。

    处理异常

    Try 语句

    我们可以使用 try 语句 来处理异常。

    • try:这是 try 语句中的唯一必需子句。该块中的代码是 Python 在 try 语句中首先运行的代码
    • except:如果 Python 在运行 try 块时遇到异常,它将跳到处理该异常的 except 块
    • else:如果 Python 在运行 try 块时没有遇到异常,它将在运行 try 块后运行该块中的代码。
    • finally:在 Python 离开此 try 语句之前,在任何情形下它都将运行此 finally 块中的代码,即使要结束程序,例如:如果 Python 在运行 except 或 else 块中的代码时遇到错误,在停止程序之前,依然会执行此finally 块。

    为何在 Python 中需要 finally 子句?

    您可以使用它 finally 来确保文件或资源是否已关闭或释放,无论是否发生异常,即使您没有捕获到异常。

    指定异常

    我们可以指定要在 except 块中处理哪个错误,如下所示:

    try:
        # some code
    except ValueError:
        # some code

    现在它会捕获 ValueError 异常,但是不会捕获其他异常。如果我们希望该处理程序处理多种异常,我们可以在 except 后面添加异常元组。

    try:
        # some code
    except (ValueError, KeyboardInterrupt):
        # some code

    或者,如果我们希望根据异常执行不同的代码块,可以添加多个 except 块。

    try:
        # some code
    except ValueError:
        # some code
    except KeyboardInterrupt:
        # some code

    访问异常信息

    try:
        # some code
    except ZeroDivisionError as e:
       # some code
       print("ZeroDivisionError occurred: {}".format(e))
       # 输出
       ZeroDivisionError occurred: division by zero

    因此依然可以访问错误消息,即使已经处理异常以防止程序崩溃!

    Exception 是所有内置异常的基础类。你可以在此处详细了解 Python 的异常。

    读写文件

    读取文件

    f = open('my_path/my_file.txt', 'r')
    file_data = f.read()
    f.close()
    1. 首先使用内置函数 open打开文件。需要文件路径字符串。open 函数会返回文件对象,它是一个 Python 对象,Python 通过该对象与文件本身交互。在此示例中,我们将此对象赋值给变量 f。
    2. 你可以在 open 函数中指定可选参数。参数之一是打开文件时采用的模式。在此示例中,我们使用 r,即只读模式。这实际上是模式参数的默认值
    3. 使用 read 访问文件对象的内容。该 read 方法会接受文件中包含的文本并放入字符串中。在此示例中,我们将该方法返回的字符串赋值给变量 file_data。
    4. 当我们处理完文件后,使用 close 方法释放该文件占用的系统资源

    代码中 f.read() 调用没有传入参数。它自动变成从当前位置读取文件的所有剩余内容,即整个文件。如果向 .read() 传入整型参数,它将读取长度是这么多字符的内容,输出所有内容,并使 ‘window’ 保持在该位置以准备继续读取

    with open(camelot.txt) as song:
        print(song.read(2))
        print(song.read(8))
        print(song.read())
    # 输出
    """
    We
    're the 
    knights of the round table
    We dance whenever we're able    """

    文本块中的 \n 是换行符。换行符表示一行的结束,告诉程序(例如文本编辑器)转到下一行。但是,对于文件中的一系列字符来说,\n 只是另一个字符。 幸运的是,Python 知道这些是特殊字符,你可以要求 Python 每次读取一行。

    f.readline(),读取文件下一行的方法。

    很方便的是,Python 将使用语法 for line in file 循环访问文件中的各行内容。 我可以使用该语法创建列表中的行列表。因为每行依然包含换行符,因此我使用 .strip() 删掉换行符。

    camelot_lines = []
    with open("camelot.txt") as f:
        for line in f:
            camelot_lines.append(line.strip())
    
    print(camelot_lines)
    # 输出
    """
    ["We're the knights of the round table", "We dance whenever we're able"]"""

    写入文件

    f = open('my_path/my_file.txt', 'w')
    f.write("Hello there!")
    f.close()
    1. 写入 ('w') 模式打开文件。如果文件不存在,Python 将为你创建一个文件。如果以写入模式打开现有文件,该文件中之前包含的所有内容将被删除。如果你打算向现有文件添加内容,但是不删除其中的内容,可以使用附加('a') 模式,而不是写入模式。
    2. 使用 write 方法向文件中添加文本
    3. 操作完毕后,关闭文件

    With

    Python 提供了一个特殊的语法,该语法会在你使用完文件后自动关闭该文件

    with open('my_path/my_file.txt', 'r') as f:
        file_data = f.read()

    with 关键字使你能够打开文件,对文件执行操作,并在缩进代码(在此示例中是读取文件)执行之后自动关闭文件。现在,我们不需要调用 f.close() 了!你只能在此缩进块中访问文件对象 f

    导入本地脚本

    我们实际上可以导入其他脚本中的 Python,如果你处理的是大型项目,需要将代码整理成多个文件并重复利用这些文件中的代码,则导入脚本很有用。如果你要导入的 Python 脚本与当前脚本位于同一个目录下,只需输入 import,然后是文件名无需扩展名 .py

    import useful_functions

    Import 语句写在 Python 脚本的顶部,每个导入语句各占一行。该 import 语句会创建一个模块对象,叫做 useful_functions。模块是包含定义和语句的 Python 文件。要访问导入模块中的对象,需要使用点记法

    import useful_functions
    useful_functions.add_five([1, 2, 3, 4])

    我们可以为导入模块添加别名,以使用不同的名称引用它。

    import useful_functions as uf
    uf.add_five([1, 2, 3, 4])

    使用 if main

    为了避免运行从其他脚本中作为模块导入的脚本中的可执行语句,将这些行包含在 if __name__ == "__main__" 块中。或者,将它们包含在函数 main() 中并在 if main 块中调用该函数。

    每当我们运行此类脚本时,Python 实际上会为所有模块设置一个特殊的内置变量 __name__。当我们运行脚本时,Python 会将此模块识别为主程序,并将此模块的 name 变量设为字符串 "__main__"。对于该脚本中导入的任何模块,这个内置 name 变量会设为该模块的名称。因此,条件 if __name__ == "__main__" 会检查该模块是否为主程序。

    # demo.py
    
    import useful_functions as uf
    
    scores = [88, 92, 79, 93, 85]
    
    mean = uf.mean(scores)
    curved = uf.add_five(scores)
    
    mean_c = uf.mean(curved)
    
    print("Scores:", scores)
    print("Original Mean:", mean, " New Mean:", mean_c)
    
    print(__name__)
    print(uf.__name__)
    # useful_functions.py
    
    def mean(num_list):
        return sum(num_list) / len(num_list)
    
    def add_five(num_list):
        return [n + 5 for n in num_list]
    
    def main():
        print("Testing mean function")
        n_list = [34, 44, 23, 46, 12, 24]
        correct_mean = 30.5
        assert(mean(n_list) == correct_mean)
    
        print("Testing add_five function")
        correct_list = [39, 49, 28, 51, 17, 29]
        assert(add_five(n_list) == correct_list)
    
        print("All tests passed!")
    
    if __name__ == '__main__':
        main()

    标准库的模块

    上面介绍了我们如何导入自己的模块,但 Python 也内置了完整的标准库模块。标准库里面有大量实用模块,我们可以将这个库看作是一个非常庞大的工具集,帮助我们轻松获取和使用现有代码大大增强我们的编程技能。

    Python 标准库详细介绍了每种模块,模块按照用途分类。标准库中的每个模块都是全小写形式。在使用每个模块时,建议阅读相关的页面。

    推荐模块

    Python 标准库包含大量模块!为了帮助你熟悉那些实用的模块,我们在下面筛选了一些我们推荐的 Python 标准库模块并解释为何我们喜欢使用它们!

    • csv:对于读取 csv 文件来说非常便利
    • collections:常见数据类型的实用扩展,包括 OrderedDictdefaultdictnamedtuple
    • random:生成假随机数字,随机打乱序列并选择随机项
    • string:关于字符串的更多函数。此模块还包括实用的字母集合,例如 string.digits(包含所有字符都是有效数字的字符串)
    • re:通过正则表达式在字符串中进行模式匹配
    • math:一些标准数学函数
    • os:与操作系统交互
    • os.pathos 的子模块,用于操纵路径名称
    • sys:直接使用 Python 解释器
    • json:适用于读写 json 文件(面向网络开发)。

    导入模块技巧

    1.要从模块中导入单个函数或类:

    from module_name import object_name

    2.要从模块中导入多个单个对象:

    from module_name import first_object, second_object

    3.要重命名模块:

    import module_name as new_name

    4.要从模块中导入对象并重命名:

    from module_name import object_name as new_name

    5.要从模块中单个地导入所有对象,请使用标准导入 module_name 语句并使用点记法访问每个对象。

    import module_name

    为了更好地管理代码,Standard 标准库中的模块被拆分成了子模块并包含在软件包中。软件包是一个包含子模块的模块。子模块使用普通的点记法指定。

    子模块的指定方式是软件包名称、点,然后是子模块名称。你可以如下所示地导入子模块。

    import package_name.submodule_name

    第三方库

    独立开发者编写了成千上万的第三方库!你可以使用 pip 安装这些库。pip 是在 Python 3 中包含的软件包管理器,它是标准 Python 软件包管理器,但并不是唯一的管理器。另一个热门的管理器是 Anaconda,该管理器专门针对数据科学。

    要使用 pip 安装软件包,在命令行中输入“pip install”,然后是软件包名称,如下所示:pip install package_name。该命令会下载并安装该软件包,以便导入你的程序中。安装完毕后,你可以使用从标准库中导入模块时用到的相同语法导入第三方软件包。

    使用 requirements.txt 文件

    大型 Python 程序可能依赖于十几个第三方软件包。为了更轻松地分享这些程序,程序员经常会在叫做 requirements.txt 的文件中列出项目的依赖项。下面是一个 requirements.txt 文件示例。

    beautifulsoup4==4.5.1
    bs4==0.0.1
    pytz==2016.7
    requests==2.11.1

    该文件的每行包含软件包名称和版本号。版本号是可选项,但是通常都会包含。不同版本的库之间可能变化不大,可能截然不同,因此有必要使用程序作者在写程序时用到的库版本。

    你可以使用 pip 一次性安装项目的所有依赖项,方法是在命令行中输入 pip install -r requirements.txt

    实用的第三方软件包

    能够安装并导入第三方库很有用,但是要成为优秀的程序员,还需要知道有哪些库可以使用。大家通常通过在线推荐或同事介绍了解实用的新库。如果你是一名 Python 编程新手,可能没有很多同事,因此为了帮助你了解入门信息,下面是优达学城工程师很喜欢使用的软件包列表。(可能部分网站在国内网络中无法打开)

    • IPython - 更好的交互式 Python 解释器。
    • requests - 提供易于使用的方法来发出网络请求。适用于访问网络 API。
    • Flask - 一个小型框架,用于构建网络应用和 API。
    • Django - 一个功能更丰富的网络应用构建框架。Django 尤其适合设计复杂、内容丰富的网络应用。
    • Beautiful Soup - 用于解析 HTML 并从中提取信息。适合网页数据抽取。
    • pytest - 扩展了 Python 的内置断言,并且是最具单元性的模块。
    • PyYAML - 用于读写 YAML 文件。
    • NumPy - 用于使用 Python 进行科学计算的最基本软件包。它包含一个强大的 N 维数组对象和实用的线性代数功能等。
    • pandas - 包含高性能、数据结构和数据分析工具的库。尤其是,pandas 提供 dataframe!
    • matplotlib - 二维绘制库,会生成达到发布标准的高品质图片,并且采用各种硬拷贝格式和交互式环境。
    • ggplot - 另一种二维绘制库,基于 R’s ggplot2 库。
    • Pillow - Python 图片库可以向你的 Python 解释器添加图片处理功能。
    • pyglet - 专门面向游戏开发的跨平台应用框架。
    • Pygame - 用于编写游戏的一系列 Python 模块。
    • pytz - Python 的世界时区定义。

    文章只是作为个人记录学习使用,如有不妥之处请指正,谢谢。

    展开全文
  • 用node.js写一个简易脚本

    千次阅读 2019-01-22 00:00:58
    1.创建一个名为demo.js的文件,如果该脚本后跟上文件名某某某,就会产生一个名为某某的文件夹 2.某某某文件内要有一个index.html及文件夹css和文件夹js 3.文件夹css内含有文件style.css,文件夹js内含有文件main....
  • 一个没有接触过脚本开发的人如何开发一个简单而又实用的油猴脚本? 本文分为几个要点:油猴的介绍安装,脚本需求分析(重点),代码更迭,最终代码。
  • 开始着手用Python写一个游戏脚本(一)

    万次阅读 多人点赞 2019-06-04 15:26:04
    学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手。 这次以热门手游楚留香作为练手的目标啦
  • 写一个shell脚本启动服务器

    千次阅读 2018-09-17 15:37:43
    使用shell脚本写一个一键启动服务器 由于我们服务器使用的docker, nginx和 redis 还有mysql都是docker启动好的 我们项目使用supervisor进程管理工具,需要提前配置,但是不知道什么原因,以前的环境配置出...
  • 自己写的手机游戏脚本

    千次阅读 多人点赞 2020-03-09 11:46:27
    由于过年时间特殊情况,在家特别无聊,就一个手机游戏的脚本 脚本所属游戏-战舰少女 功能很简单 ● 自动刷活动材料 ● 自动收获远征奖励 ● 自动出征升级 ● 自动分解船只 但是毕竟只是自己用的,选地图功能没有...
  • 一个用lua的游戏脚本实例

    热门讨论 2010-04-19 13:28:03
    一个用lua的游戏脚本实例,是word格式的,值得一看,通过这个例子你可以了解到游戏中的脚本是怎么
  • shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便于运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序。 shell还是一个功能强大的编程语言,易编写,易调试。...
  • 什么脚本如此厉害?
  • 抢课脚本从想到放弃

    千次阅读 多人点赞 2018-12-05 10:20:46
    最近想写一个抢课脚本,但是会的东西还不够,等我学会了这些技术,可能我已经不需要抢课了(留下来无助的泪水) 抢课脚本最基础的就是按键精灵了 首先要弄明白的是服务器,HTTP协议,然后还要用C++,python...
  • 用已掌握的知识已经用"autopy"的功能一个鼠标自动点击排队的脚本,但是我想让这个脚本不用在窗口最前端显示也能运行,就是最小化了也能继续在后台继续工作,可是不了解Python的强大功能,下面是代码,有些是在...
  • 判断这个附件是否显示,写一个函数(按照我的往下),并且在显示的情况下判断是否有值,没有的话提示“请添加附件”。 附件 var s1=$("input[name=t1]").val(); 判断为空的我会,就是不明白是否显示...
  • 如何快速优雅的编写一个脚本程序?用这个!

    万次阅读 多人点赞 2019-06-07 21:40:00
    在日常工作当中,我们会不时借助脚本程序来处理一些重复性工作,以帮助我们提升工作效率。近几年 Python 与 Ruby 发展迅猛,使得它们成为了很多人编写脚本程序时的首选...
  • 学习shell脚本-每天写一个脚本-按照日期创建一个文件或目录 按照日期创建一个文件或目录 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/...
  • ubuntu写一个.sh脚本文件

    千次阅读 2018-09-01 11:56:30
    touch hello.sh gedit hello.sh 然后输入 #!/bin/bash echo "Hello world!" chmod +x hello.sh ./hello.sh  
  • 如何写一个shell脚本并运行

    万次阅读 2016-04-10 11:53:32
    1、用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第行#!/bin/bash里面指明了shell类型的,比如#!/bin/bash指明是bash,#!/bin/sh则是sh);然后输入命令...
  • 在Ubuntu的shell终端写一个简单脚本

    千次阅读 2017-06-07 20:27:15
    1.打开终端(terminal),输入vi hello.sh 2然后在打开的脚本文件中键入: #!/bin/bash echo "hello world!...本人编写这个主要是因为测试一个shell能否实现简单脚本的功能,拿来分享,大家看看就好~~~
  • 经常会一些小的shell脚本工具,给别人使用的时候别人不知道如何使用,怎么添加参数,这个时候你可以给你自己的shell脚本添加一个 --help 参数来提示使用者如何使用(就像外部的Linux命令都有- -help提示一样)。...
  • Shell脚本写一个应用监控程序

    千次阅读 2017-11-20 16:12:11
    在嵌入式Linux系统中交叉编译一个socket服务器、socket服务存在意外进程结束的现象,下面通过shell脚本完成对socket服务程序的监控。 一、PS命令查看Linux程序进程 二、shell脚本 利用PS命令查看server进程的状态,...
  • 最近因为工作,每天早上需要在Windows上启动reids、zookeeper、tomcat几个程序,时间一长就感觉有点繁琐,于是心血来潮想脚本来一键解决问题,经过一番百度,总结出了以下内容: 1、首先需要创建一个.bat文件。...
  • 好多朋友在入门python的时候都是以爬虫入手...而从这2个功能拓展,需要的知识就很多了:请求数据、反爬处理、页面解析、内容匹配、绕过验证码、保持登录以及数据库等等相关知识,今天我们就来说说做一个简单的爬虫,...
  • Kotlin如何写脚本

    千次阅读 2018-04-07 16:00:01
    编写Kotlin脚本,得先创建一个.kts文件 二、以HelloGoogle.kts文件为例 三、编写脚本文件,用IDEA运行,输出“Hello Google” 四、一般脚本都是在命令行运行的,那么怎么在命令行运行该脚本呢 进入该脚本...
  • 收藏!篇教会你90%的shell脚本

    万次阅读 多人点赞 2019-09-06 18:18:36
    还不会shell脚本?这篇文章教会你90%的shell脚本
  • 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录 #!/bin/bash echo "Hello, $LOGNAME" echo "Current date is `date`" echo "User is `whoami`" echo "Current directory `pwd`
  • python制作阴阳师挂机脚本

    千次阅读 多人点赞 2019-09-28 11:54:44
    目前版本仅支持御魂副本,可以同时开多号一起刷,部分代码如下: def YuHunTwoWindow ( LogUI ) : "" " 自动御魂 , 双开模式 "" " imgs = loadImgs ( ) PassTime = 1 while True : LogUI . ...
  • 写个脚本批量注册网站账号

    万次阅读 2020-10-30 21:09:33
    实现思路 抓包接口 导入excel账号,读取解析账号 循环注册 回调记录 示例代码(按键精灵) 示例代码(PHP)
  • 京东抢购Python脚本

    万次阅读 多人点赞 2020-02-15 10:48:35
    # 打开一个火狐浏览器 webdriver . maximize_window ( ) def buy_on_time ( buytime ) : while True : now = datetime . datetime . now ( ) if now . strftime ( '%Y-%m-%d %H:%M:%S' ) == ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,105,554
精华内容 442,221
关键字:

如何自己写一个脚本