精华内容
下载资源
问答
  • [272]如何把Python脚本导出为exe程序

    万次阅读 多人点赞 2018-07-08 14:07:34
    pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行 最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。 可运行在Windows,Mac和Linux操作系统下。 但它不是跨编译的,也就是说在...

    一.pyinstaller简介

    pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行

    最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。 可运行在Windows,Mac和Linux操作系统下。 但它不是跨编译的,也就是说在Windows下用PyInstaller生成的exe只能运行在Windows下,在Linux下生成的只能运行在Linux下。

    二.pyinstaller在windows下的安装

    使用命令pip install pyinstaller即可 在windows下,pyinstaller需要PyWin32的支持。当用pip安装pyinstaller时未找到PyWin32,会自动安装pypiwin32

    image.png

    image.png

    出现Successfully installed pyinstaller-3.1.1 pypiwin32-219即表示安装成功

    三.打包

    打包的app里并不包含任何源码,但将脚本的.pyc文件打包了。

    基本语法: pyinstaller options myscript.py

    常用的可选参数如下:
    –onefile 将结果打包成一个可执行文件
    –onedir 将所有结果打包到一个文件夹中,该文件夹包括一个可执行文件和可执行文件执行时需要的依赖文件(默认)
    –paths=DIR 设置导入路径
    –distpath=DIR 设置将打包的结果文件放置的路径
    –specpath=DIR 设置将spec文件放置的路径
    –windowed 使用windows子系统执行,不会打开命令行(只对windows有效)
    –nowindowed 使用控制台子系统执行(默认)(只对windows有效)
    –icon=<FILE.ICO> 将file.ico添加为可执行文件的资源(只对windows有效)

    如pyinstaller --paths=“D:\Queena” guess_exe.py

    四.小实例(windows下)

    写好游戏文件guess_exe.py,代码如下:

    __author__ = 'zhou'
    
    # -*- coding:utf-8 -*-
    
    # 摇3次骰子,当总数total,3<=total<=10时为小,11<=total<=18为大
    
    import random
    
    import time
    
    def enter_stake(current_money):
    
     '''输入小于结余的赌资及翻倍率,未考虑输入type错误的情况'''
    
     stake = int(input('How much you wanna bet?(such as 1000):'))
    
     rate = int(input("What multiplier do you want?你想翻几倍?(such as 2):"))
    
     small_compare = current_money < stake * rate
    
     while small_compare == True:
    
     stake = int(input('You has not so much money ${}!How much you wanna bet?(such as 1000):'.format(stake * rate)))
    
     rate = int(input("What multiplier do you want?你想翻几倍?(such as 2):"))
    
     small_compare = current_money < stake * rate
    
     return stake,rate
    
    def roll_dice(times = 3):
    
     '''摇骰子'''
    
     print('<<<<<<<<<< Roll The Dice! >>>>>>>>>>')
    
     points_list = []
    
     while times > 0:
    
     number = random.randrange(1,7)
    
     points_list.append(number)
    
     times -= 1
    
     return points_list
    
    def roll_result(total):
    
     '''判断是大是小'''
    
     is_big = 11 <= total <= 18
    
     is_small = 3 <= total <= 10
    
     if is_small:
    
     return 'Small'
    
     elif is_big:
    
     return 'Big'
    
    def settlement(boo,points_list,current_money,stake = 1000,rate = 1):
    
     '''结余'''
    
     increase = stake * rate
    
     if boo:
    
     current_money += increase
    
     print('The points are ' + str(points_list) + ' .You win!')
    
     print('You gained $' + str(increase) + '.You have $' + str(current_money) + ' now.' )
    
     else:
    
     current_money -= increase
    
     print('The points are ' + str(points_list) + ' .You lose!')
    
     print('You lost $' + str(increase) + '.You have $' + str(current_money) + ' now.' )
    
     return current_money
    
    def sleep_second(seconds=1):
    
     '''休眠'''
    
     time.sleep(seconds)
    
    # 开始游戏
    
    def start_game():
    
     '''开始猜大小的游戏'''
    
     current_money = 1000
    
     print('You have ${} now.'.format(current_money))
    
     sleep_second()
    
     while current_money > 0:
    
     print('<<<<<<<<<<<<<<<<<<<< Game Starts! >>>>>>>>>>>>>>>>>>>>')
    
     your_choice = input('Big or Small: ')
    
     choices = ['Big','Small']
    
     if your_choice in choices:
    
     stake,rate = enter_stake(current_money)
    
     points_list = roll_dice()
    
     total = sum(points_list)
    
     actual_result = roll_result(total)
    
     boo = your_choice == actual_result
    
     current_money = settlement(boo,points_list,current_money,stake,rate)
    
     else:
    
     print('Invalid input!')
    
     else:
    
     sleep_second()
    
     print('Game Over!')
    
     sleep_second(2)
    
    if __name__ == '__main__':
    
     start_game()
    

    之后命令行,切换到guess_exe.py的目录下, 输入:

    pyinstaller --onefile --nowindowed --icon="D:\Queena\PyCharmProjects\dist1\computer_three.ico" guess_exe.py
    

    image.png
    image.png

    就会在当前文件下形成build文件夹、dist文件夹和.spec文件。 dist里就是guess_exe.exe可执行文件。

    [外链图片转存失败(img-NSV511rc-1562767762570)(https://upload-images.jianshu.io/upload_images/6152595-56dc5aad9152513e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    1、安装pyinstaller(需要先安装pip)、再:pip install pyinstaller

    (由于我事先安装了pyinstaller,为了方便就卸载了,不知道影不影响显示。但安装成功后会有“Successfully installed pyinstaller”的提示)

    image.png
    2、定位到pyinstaller.exe所在文件夹(一般再python下的“scripts”文件夹下)

    (温馨提示:再cmd下tab键又补全功能哦)

    image.png
    3、再添加上你要转换的文件地址(两者之间有空格)

    pyinstaller.exe后面如果加上-F就是打包为一个exe文件(文件会比较大),如果不加就会有很多库文件;加上-w就是打包为没有cmd窗口的exe,不加运行时就会出现cmd窗口。(加不加凭个人喜好)

    image.png
    4. 加-F的效果

    image.png

    1. 不加-F
      image.png

    2. 不加-w的效果

    (加-w的话,就没有后面的那个黑框了

    image.png

    1、-F指令

    注意指令区分大小写。这里是大写。使用-F指令可以把应用打包成一个独立的exe文件,否则是一个带各种dll和依赖文件的文件夹

    image.png

    2、-p指令

    这个指令后面可以增加pyinstaller搜索模块的路径。因为应用打包涉及的模块很多。这里可以自己添加路径。不过经过笔者测试,site-packages目录下都是可以被识别的,不需要再手动添加

    image.png

    展开全文
  • shell脚本中调用python脚本的函数并获取python脚本函数的return值 例子1: 废话少说,直接上代码: python脚本:merge_report.py # coding=utf-8 import sys def main(param): return param def find_...

    shell脚本中调用python脚本的函数并获取python脚本函数的return值

    例子1:

    废话少说,直接上代码:

    python脚本:merge_report.py

    # coding=utf-8
      
    import sys
    
    def main(param):
            return param
    
    def find_report(param):
            return param
    
    if __name__ == "__main__":
            print main('main')
            print find_report('find_report')

    shell脚本:test_sh.sh

    #!/bin/bash
    # cd 到python脚本所在的目录,以便导入
    cd /home/shell_python
    # 打印当前路径
    echo `pwd`
    # 执行python函数获取函数return的返回值,并赋值给变量
    haha=`python -c 'import merge_report; print merge_report.find_report("bilibili")'`
    # 打印结果
    echo  $haha

    执行shell脚本:

    sh test_sh.sh
    

    输出:

    bilibili

     

     

    例子2:

    Shell脚本调用Python函数,本例子是通过Shell调用Python脚本,检查服务器上的某端口是否开启,编写的Python脚本port.py,脚本内容:

    #!/usr/bin/python
    # port.py
     
    import socket
     
    def scan(port):
        s = socket.socket()
        s.settimeout(0.1)
        if s.connect_ex(('localhost', port)) == 0:
            return 'port: ' + str(port) + ' open'
        else:
            return 'port: ' + str(port) + ' not open'
        s.close()
     
    if __name__ == '__main__':
      scan()


     

     在Shell脚本中,这样编写命令

        cd /home/appuser
        checkresult=`python -c 'import port; print port.scan(80)'`
        echo $checkresult
        


    语句解释:首先cd到要执行的Python脚本目录,然后使用 python -c 'import port; print port.scan(80)' 调用port模块中的scan函数,检查80端口是否正在使用。-c选项是告诉Python来执行一些Python命令

    echo输出结果

    port: 80 open


     

    如果传入一个不是正在使用的端口号801

    checkresult=`python -c 'import port; print port.scan(801)'`


    echo输出结果

    port: 801 not open


     

    另外,`python -c 'import port; print port.scan(80)'`  也可以写成  $(python -c 'import port; print port.scan(80)')

     

    实际使用中的一个例子,Shell脚本调用一个Python方法,通过socket检查远端的IP和端口是否可连通

    Python脚本pysocket.py:

    #!/usr/bin/python
     
    import socket
     
    def scan(ip,port):
        s = socket.socket()
        s.settimeout(2)
        
        if s.connect_ex((str(ip), port)) == 0:
            return 0
        else:
            return 1
        s.close()
     
    if __name__ == '__main__':
        scan()


    pysocket.py中的scan方法里,如果通过socket能连接上ip和端口的服务,则返回0值,否则返回1

     

    Shell脚本

    max_check=5
    #检查服务是否启动
    function check() {
         #先进入到pysocket.py所在目录
         cd /opt/data/py
         i=1
         while [ $i -le $max_check ]
         do
             echo "$i th check: " $1 " " $2
             reval=$(python -c 'import pysocket; print pysocket.scan("'$1'",'$2')')
             echo "check result: "$reval
             if [ $reval -eq 0 ]; then
                 echo "check success"
                 return 0
             else
                 echo "next check after 30 seconds"
                 sleep 30
             fi
             let i++
         done
         return 1
    }


       Shell中的check函数中,通过 $(python -c 'import pysocket; print pysocket.scan("'$1'",'$2')') 调用pysocket.py 的scan方法并传参数,如果连接不通,每次检查后等待30秒,最多检查5次。

     Shell调用check函数

    check 10.7.128.186 26666
    

     

    展开全文
  • 1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main($canshu1, $canshu2) ..... main(sys.argv[1], sys.argv[2]) 2.使用...
    1.shell调用python脚本,并且向python脚本传递参数:
    
    shell中:
    
    python test.py $para1 $para2
    
    
    python中:
    
    import sys
    
    
    def main($canshu1, $canshu2)
    
      .....
    
    
    
    main(sys.argv[1], sys.argv[2])

    复制代码

    2.使用shell调用python中的函数:

    python脚本如下:

    test.py:

     

    复制代码

    import ConfigParser  
      
    config = ConfigParser.ConfigParser()  
    config.read("test.conf")  
      
    def get_foo():  
        return config.get("locations", "foo")  
      
    def get_bar():  
        return config.get("locations", "bar")  

    复制代码

    我想通过shell调用里面的get_foo,只需要在shell中执行一个调用的命令行即可:

    python -c 'import test; print test.get_foo()'  

    -c选项只是告诉python来执行一些python命令。

    为了将结果存储在变量中,你可以因此这样做:

    RESULT_FOO=`python -c 'import test; print test.get_foo()'`  

    或者,等效于:

    RESULT=$(python -c 'import test; print test.get_foo()')  


    我们也可以一次调用所有方法,放入一个集合中,再调用切割方法获取相应的值:

    ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()')  

    如果需要第二个结果,并将其放入RESULT_BAR:

     RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2)  

     

    本文转载自:https://blog.csdn.net/tanlon_0308/article/details/40423751

    展开全文
  • python脚本编写

    万次阅读 多人点赞 2019-03-29 22:37:20
    Python 是一种“脚本语言”。脚本,对应的英文是:script。一般人看到script这个英文单词,或许想到的更多的是:电影的剧本,就是一段段的脚本,所组成的。电影剧本的脚本,决定了电影中的人和物,都做哪些事情,...

     

    什么是脚本

    Python 是一种“脚本语言”。脚本,对应的英文是:script。一般人看到script这个英文单词,或许想到的更多的是:电影的剧本,就是一段段的脚本,所组成的。电影剧本的脚本,决定了电影中的人和物,都做哪些事情,怎么做。而计算机中的脚本,决定了:计算机中的操作系统和各种软件工具,要做哪些事情,以及具体怎么做。

    脚本 vs 程序

    你可能想要了解脚本与一般程序的区别是什么。

    脚本与一般程序的主要区别在于是否编译。相对于程序而言,脚本更加随性。写完了脚本,直接就可以在某种具有解释功能的环境中运行。(我们将会在本课学习如何写和运行 Python 脚本。)

    而非脚本语言(编译语言),比如 C、Java 语言。我们需要通过编译(Compile)和链接(link)等步骤,生成可执行文件。然后通过可执行文件在计算机上运行。

    脚本编写

    欢迎学习这节关于脚本编写的课程!你将学习:

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

    安装 Python 3

    我们将使用最新版 Python - Python 3。虽然 Python 2 在很多场合依然会用到,但是已经不再接受更新。为了与后续 Python 改进保持兼容,建议使用 Python 3。

    为了完成这一步骤,你需要使用命令行。我们将详细介绍所有细节部分,因此如果你从未使用过命令行,也没关系!如果你想深入了解命令行,请参阅我们的 Shell 讲习班,详细了解 Unix Shell。

    你的计算机上已经有 Python 吗?

    Mac OS X 和 Linux 通常已经自带了一个版本号比较老的 Python 2,请不要对该 Python 做出任何修改或者删除,因为操作系统的部分组件依赖它,修改或者删除它可能会影响到操作系统的某些功能。但是单独安装 Python 3,也不会对系统有任何影响。

    Windows 通常没有自带 Python,但是你可以在安装之前,先检查下系统是否安装了 Python。首先检查是否已经安装了 Python 3。

    打开终端或命令行。在 Windows 上,进入命令提示符窗口的方式是转到运行…(同时按下带有windows图标的win键+字母r),然后输入 cmd 并按下 Enter 键。

    在新的终端或命令提示符窗口中,输入 python --version 或者 python3 --version

    $ python --version
    

    然后按下 Enter 键。

    注意:这里的$符号在这里只是一个提示,表示命令行的开始,它会自动显示在屏幕上。这不是命令的一部分。

    系统可能会显示已安装的 Python 版本是 Python 2.7.9。在这种情况下,表明你已经安装了 Python 2,你需要按照下面几个部分中的步骤操作,更新到 Python 3。

    如果版本号以 3 开头,则表明你已经安装了 Python 3!请勿再次安装 Python!

    此外,你可能会看到错误消息。暂时不用管该错误,直接尝试下面几个部分中的步骤。

    方法 1:安装 Anaconda

    对于数据分析学员,强烈建议采用这种 Python 安装方式。

    如果你对数据科学方面的 Python 感兴趣,强烈建议安装 Anaconda,即使你已经在计算机上安装了 Python。如果你尚未设置计算机,请参阅我们的 Anaconda 和 Jupyter notebook 简短课程设置计算机。你将学习如何为这门课程设置环境,需要安装 Python 3.6、Jupyter Notebook、NumPy、pandas、Matplotlib 和 Seaborn。

    Anaconda 包含大量专门针对数据科学的库和软件分发版本,某些库和软件比较难安装。同时,你可以很轻松地在计算机上设置不同的环境,以便在不同版本的 Python 和软件包之间快速切换!例如,如果你正在处理的某个项目需要 Python 3.6 以及不同的依赖项,那么 Anaconda 的环境管理功能可以提供帮助。上面给出链接的 Anaconda 和 Jupyter notebook 免费课程讲授了如何处理这类情形。

    如果你的英语不是很熟练,你也可以在中文网站上搜索安装Anaconda的教程,比如这个知乎帖子

    方法 2:安装 Python

    对使用 Python 进行数据分析不感兴趣的学员建议采用此方法。

    如果你对学习面向数据科学的 Python 不感兴趣,并且你的计算机尚未安装 Python 3,那么现在该安装 Python 3 了!请转到 Python 下载页面并找到适用于你的操作系统、以 3 开头的最新版本(例如 Python 3.5.2)。

    对于 Windows 和 Mac,我们发现最简单的方法是直接从 Python 下载网站下载安装程序并运行。如果你使用的是 Linux,Python 下载页面提供了进行下载和编译的源代码。此外,你可以使用 APT 等安装工具安装 Python 3。

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

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

    完成安装程序中的所有步骤操作或编译了源代码后,则安装完毕,你可以在自己的计算机上使用 Python 3 了!

    运行 Python 脚本

    运行 Python 脚本!!

    1. 下载在本页面底部给出链接的文件 first_script.py(你可能需要右击它,并存储为文件),然后将该文件移到计算机上的相应目录下。如果你还没有为这门课程创建一个目录的话,可以乘机创建一个目录。
    2. 打开终端并使用 cd 命令转到包含所下载文件的目录。
    3. 现在你已经位于该文件所在的目录,可以运行该文件了,方法是输入 python first_script.py,然后按下 Enter 键。

    提示:文件下载后,_ 会变成- ,你可能需要改成python first-script.py

    如果你看到终端输出了以下消息,则表明你成功地运行了脚本:

    Congratulations on running this script!!
    

    辅助材料

     first_script.py

    编程环境设置

    配置 Python 编程环境

    你已经看到我的设置,现在花时间在你自己的计算机上熟悉下界面。 下面是一些我们推荐的文本编辑器,你可以尝试一个看看。

    对于 Mac:

    对于 Windows:

    对于 Linux:

    设置好屏幕,打开文本编辑器、终端/命令行,并在网络浏览器中打开优达学城课堂,以便与你的 Python 脚本交互。调整显示器选项,找到你觉得最舒适的显示效果,并看看能否找到 tab-to-four-spaces 选项 - 该选项对于 Python 缩进来说非常有用。

    修改 Python 脚本

    自己编写脚本

    在文本编辑器中打开全新的空文件,命名该文件并将其保存到放置 Python 课程文件的文件夹中。将以下代码放入该文件里。

    how_many_snakes = 1
    snake_string = """
    Welcome to Python3!
    
                 ____
                / . .\\
                \  ---<
                 \  /
       __________/ /
    -=:___________/
    
    <3, Juno
    """
    
    
    print(snake_string * how_many_snakes)

    在脚本中接受原始输入

    我们可以使用内置函数 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)
    

    如果用户输入 2 * 3,输出为 6

    练习:在脚本中接受原始输入

    练习:生成消息

    假设你是一名老师,需要向每位学生发一条消息,提醒他们未交的作业和分数是多少。你知道每名学生的姓名,没交的作业份数和分数,这些数据保存在了电子表格中,你只需将这些输入插入你想到的以下消息中即可:

    Hi [insert student name],

    This is a reminder that you have [insert number of missing assignments] assignments left to submit before you can graduate. Your current grade is [insert current grade] and can increase to [insert potential grade] if you submit all assignments before the due date.

    你可以将此消息复制粘贴后发送给每位学生,并且每次手动插入相应的值。但是你要写一个程序来帮助你完成这一流程。

    写一个完成以下操作的脚本:

    1. 请求用户输入三次。一次是名字列表,一次是未交作业数量列表,一次是分数列表。使用该输入创建 namesassignments 和 grades 列表。
    2. 使用循环为每个学生输出一条信息并包含正确的值。潜在分数是 2 乘以未交作业数加上当前分数。

    下面是在终端内成功运行该脚本的示例。

    错误和异常

    • 当 Python 无法解析代码时,就会发生语法错误,因为我们没有遵守正确的 Python 语法。当你出现拼写错误或第一次开始学习 Python 时,可能会遇到这些错误。

    • 当在程序执行期间出现意外情况时,就会发生异常,即使代码在语法上正确无误。Python 有不同类型的内置异常,你可以在错误消息中查看系统抛出了什么异常。

    Try 语句

    我们可以使用 try 语句处理异常。你可以使用 4 个子句(除了视频中显示的子句之外还有一个子句)。

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

    为何在 Python 中需要 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

    练习解决方案:处理除以零的情形

    def create_groups(items, num_groups):
        try:
            size = len(items) // num_groups
        except ZeroDivisionError:
            print("WARNING: Returning empty list. Please use a nonzero number.")
            return []
        else:
            groups = []
            for i in range(0, len(items), size):
                groups.append(items[i:i + size])
            return groups
        finally:
            print("{} groups returned.".format(num_groups))
    
    print("Creating 6 groups...")
    for group in create_groups(range(32), 6):
        print(list(group))
    
    print("\nCreating 0 groups...")
    for group in create_groups(range(32), 0):
        print(list(group))

    修改上面的脚本以处理除以零错误。正确修改的话,应该会输出:

    Creating 6 groups...
    6 groups returned.
    [0, 1, 2, 3, 4]
    [5, 6, 7, 8, 9]
    [10, 11, 12, 13, 14]
    [15, 16, 17, 18, 19]
    [20, 21, 22, 23, 24]
    [25, 26, 27, 28, 29]
    [30, 31]
    
    Creating 0 groups...
    WARNING: Returning empty list. Please use a nonzero number.
    0 groups returned.

    访问错误消息

    在处理异常时,依然可以如下所示地访问其错误消息:

    try:
        # some code
    except ZeroDivisionError as e:
       # some code
       print("ZeroDivisionError occurred: {}".format(e))
    

    应该会输出如下所示的结果:

    ZeroDivisionError occurred: division by zero
    

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

    如果没有要处理的具体错误,依然可以如下所示地访问消息:

    try:
        # some code
    except Exception as e:
       # some code
       print("Exception occurred: {}".format(e))
    

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

    读写文件

    以下是如何在 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 = 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__"会检查该模块是否为主程序。 

    尝试一下!

    下面是我在上述视频中使用的代码。请在同一目录下创建这些脚本,并在终端里运行这些脚本!实验 if 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 标准库模块并解释为何我们喜欢使用它们! 

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

    希望你能用上这些模块!

    导入模块技巧

    还有一些在不同情形下很有用的其他形式的 import 语句。

    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. 要从模块中单个地导入所有对象(请勿这么做):
      from module_name import *
      
    6. 如果你真的想使用模块中的所有对象,请使用标准导入 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 的世界时区定义。

    在解释器中进行实验

    通过在终端里输入 python 启动 python 交互式解释器。你可以接着输入内容,直接与 Python 交互。这是每次实验和尝试一段 Python 代码的很棒工具。只需输入 Python 代码,输出将出现在下一行。

    >>> type(5.23)
    <class 'float'>
    

    在解释器中,提示符窗口中最后一行的值将自动输出。如果有多行代码需要输出值,依然需要使用 print。

    如果你开始定义函数,你将在提示符窗口中看到变化,表示这是可以继续的行。在定义函数时,你需要自己添加缩进。

    >>> def cylinder_volume(height, radius):
    ...         pi = 3.14159
    ...         return height * pi * radius ** 2
    

    解释器的不足之处是修改代码比较麻烦。如果你在输入该函数时出现了拼写错误,或者忘记缩进函数的主体部分,无法使用鼠标将光标点到要点击的位置。需要使用箭头键在代码行中来回移动。有必要了解一些实用的快捷方式,例如移到一行的开头或结尾。

    注意,我可以引用我在解释器中之前定义的任何对象!

    >>> cylinder_volume(10, 3)
    282.7431
    

    一个实用技巧是在交互式提示符窗口中使用上下箭头键循环浏览最近的命令。这样可以重新运行或修改已经尝试的代码。

    要退出 Python 交互式解释器,使用命令 exit() 或在 mac/linux 上按下 ctrl+D,在 windows 上按下 ctrl+Z,然后按下 Enter 键。

    IPython

    实际上有一个代替默认 python 交互式解释器的强大解释器 IPython,它具有很多其他功能。

    • Tab 键补充完整
    • ?:关于对象的详细信息
    • !:执行系统 shell 命令
    • 语法突出显示

    你可以在此处查看更多其他功能!

    获取所需的信息

    要想成为熟练的程序员,需要掌握大量知识。需要了解库、记住语法以及其他细节。此外,让这一切更具挑战的是,技术在不断革新,因为新的技巧和工具会不断出现。

    对于编程新手来说,学习所有这些细节并及时获悉新的发展动态似乎是一项不可能完成的任务。的确是这样!具有多年经验的编程专业人士实际上并不是在脑中记下百科全书一样的知识,而是掌握了快速查找信息的技巧。

    如何搜索

    下面是高效网络搜索的一些技巧:

    • 在查询时,尝试使用 Python 或要使用的库的名称作为第一个字词。这样会告诉搜索引擎优先显示与你要使用的工具明确相关的结果。
    • 创建良好的搜索查询需要多次尝试。如果第一次尝试时没有找到有用的结果,再试一遍。 
    • 尝试使用在一开始搜索时发现的网页上发现的关键字,使搜索引擎在后续搜索中转到更好的资源。
    • 复制粘贴错误消息作为搜索字词。这样会出现错误解释性信息和潜在原因。错误消息可能包括你所写的特定行号引用。只在搜索中包含这些信息之前的错误消息部分。
    • 如果找不到问题答案,自己提出问题!StackOverflow 等社区有一些行为规则,如果你要加入该社区,必须了解这些规则,但是别因为这些规则而不愿意使用这些资源。

    在线资源的优先级

    虽然有很多关于编程的在线资源,但是并非所有资源都是同等水平的。下面的资源列表按照大致的可靠性顺序排序。

    1. Python 教程 - 这部分官方文档给出了 Python 的语法和标准库。它会举例讲解,并且采用的语言比主要文档的要浅显易懂。确保阅读该文档的 Python 3 版本!
    2. Python 语言和库参考资料 - 语言参考资料和库参考资料比教程更具技术性,但肯定是可靠的信息来源。当你越来越熟悉 Python 时,应该更频繁地使用这些资源。
    3. 第三方库文档 - 第三方库会在自己的网站上发布文档,通常发布于 https://readthedocs.org/ 。你可以根据文档质量判断第三方库的质量。如果开发者没有时间编写好的文档,很可能也没时间完善库。
    4. 非常专业的网站和博客 - 前面的资源都是主要资源,他们是编写相应代码的同一作者编写的文档。主要资源是最可靠的资源。次要资源也是非常宝贵的资源。次要资源比较麻烦的是需要判断资源的可信度。Doug Hellmann 等作者和 Eli Bendersky 等开发者的网站很棒。不出名作者的博客可能很棒,也可能很糟糕。
    5. StackOverflow - 这个问答网站有很多用户访问,因此很有可能有人之前提过相关的问题,并且有人回答了!但是,答案是大家自愿提供的,质量参差不齐。在将解决方案应用到你的程序中之前,始终先理解解决方案。如果答案只有一行,没有解释,则值得怀疑。你可以在此网站上查找关于你的问题的更多信息,或发现替代性搜索字词。
    6. Bug 跟踪器 - 有时候,你可能会遇到非常罕见的问题或者非常新的问题,没有人在 StackOverflow 上提过。例如,你可能会在 GitHub 上的 bug 报告中找到关于你的错误的信息。这些 bug 报告很有用,但是你可能需要自己开展一些工程方面的研究,才能解决问题。
    7. 随机网络论坛 - 有时候,搜索结果可能会生成一些自 2004 年左右就不再活跃的论坛。如果这些资源是唯一解决你的问题的资源,那么你应该重新思考下寻找解决方案的方式。
    展开全文
  • python脚本中启动另一个python脚本

    千次阅读 2015-03-16 10:23:38
    有时间,我们需要在一个python脚本中调起另一个python脚本,下面我尝试了一下,  1.子脚本 #coding:utf8 #!/usr/local/bin/python import time import datetime import os import sys import traceback import ...
  • Python-Windows下执行Python脚本

    千次阅读 2020-12-20 21:55:20
    Python-Windows下执行Python脚本 亲测可用
  • 本节书摘来自异步社区《面向ArcGIS的Python脚本编程》一书中的第1章,第1.7节,作者:【美】Paul A. Zandbergen著,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.7 Python脚本实例 面向ArcGIS的Python脚本...
  • 如果想在Centos环境中通过执行一个python脚本去停止另一个正在执行的python脚本,请看下文。 执行脚本名:run.py import time count=0 con=True while con: now_time=time.strftime("%Y-%m-%d %H:%M:%S", time....
  • 【Python】python脚本实例

    千次阅读 2019-07-28 21:50:32
    python脚本的实例 本文通过一个简单的python脚本实例,来介绍python语法。 参数:ip地址,端口号port 需求: 首先进行ping,如果ping不成功就就进行traceroute 如果ping得通就行telnet traceroute的结果要输出最后...
  • Python 脚本编写

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

    千次阅读 2018-09-28 18:35:42
    调用python脚本有以下几种情况,不带参数调用python脚本,动态传参数调用python脚本,调用python脚本中的某个方法,以下将讲解如何实现上述需求。  代码在windows系统上运行,需要提前安装p...
  • Python-Linux下执行Python脚本

    千次阅读 2020-12-20 10:29:33
    Linux下执行Python脚本 亲测可用 1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。...
  • Python脚本刷BOOKER

    千次阅读 2020-06-09 22:03:45
    Python脚本刷BOOKER 代码地址
  • Qt调用Python脚本

    万次阅读 热门讨论 2017-09-01 17:53:14
    因为Python库比较强大,所以就采用Qt去调用Python脚本进行项目开发,下面是Qt调用Python脚本,结合CPython进行传值等 使用的编译器是QtCreater5.6 使用Python版本是Python3.4   在调用Python脚本时,先将Python...
  • 作者是在线疯狂发布于2014年10月12日在Python,译林. ...这很好,但你有没有想过将你编写的Python脚本转化为可执行文件?这似乎是一个很赞的主意,有许多原因!你可以在没有Python解释器的情况下重
  • Java调用Python脚本

    万次阅读 2018-11-22 16:15:06
    最近突发奇想地想要在Java里调用Python脚本,在网上查过之后还真的可以。 常见的java调用python脚本方式 通过Jython.jar提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 这两种方法我都尝试过,...
  • 淘宝抢购Python脚本

    千次阅读 2021-01-31 22:59:09
    第二步:写好Python脚本,在抢购之前运行,并设置好抢购时间。 Python脚本实现 安装Python。我安装的是anaconda 安装webdriver扩展。它是Selenium模块的一部分。Selenium是一个用于Web应用程序测试的工具,用于测试...
  • python脚本问题与解决方案

    千次阅读 多人点赞 2020-12-30 18:13:25
    记录下跑python脚本时,遇到的问题。 最近在github上看到一个抢京东茅台脚本,在这里推荐一下 https://github.com/huanghyw/jd_seckill (该仓库在20201230号已经删除了,可以根据项目名称,自己查询github的仓库) ...
  • 其中遇到了一个问题,即python脚本一闪而逝。接下来进行具体介绍。 1.打包python脚本。 首先安装PyInstaller:pip install pyinstaller 其次控制台转到py文件目录下,输入命令:pyinstaller -F _.py 最后在...
  • MATLAB调用python脚本

    2020-02-02 19:10:42
    MATLAB如何调用python脚本? 我们可以通过Matlab的 system指令 ,实现对python脚本的调用。 因此,实现方法为: [status,cmdout]=system(‘python D:\Desktop\hello_world.py’) 即python 路径 运行结果: ...
  • python--Python脚本执行SQL

    千次阅读 2019-05-07 18:34:41
    说明:在Linux写python脚本执行SQL,废话不多说,直接贴代码解释。 #!/usr/bin/env python ##python脚本格式,这里有一点要说明的是:#!/usr/bin/env python与#!/usr/bin/python的区别? ##如下:#!/usr/bin/...
  • 安装部署Python脚本

    千次阅读 2021-03-09 17:24:34
    安装部署Python脚本 #!/bin/bash #该脚本是源码安装Python echo "正在安装,请稍后" echo "安装依赖包" yum -y install gcc gcc-c++ make zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel ...
  • Python脚本抢购茅台,一键式傻瓜教程,不会python 也能用,京东茅台,苏宁茅台,天猫超市茅台
  • 运行python脚本时出现no module named cv2怎么解决

    万次阅读 多人点赞 2018-08-04 23:34:20
    运行python脚本时报错: ImportError: No module named cv2   第一想法: 使用命令: pip install cv2 会报错找不到请求的版本   解决方法: 使用命令 pip install opencv-python...
  • docker 使用python 镜像运行python脚本

    千次阅读 2019-11-28 11:10:11
    第一步创建:python脚本 # touchhelloworld.py #vim helloworld.py #!/usr/bin/python print("hello world!") 保存 [root@test myapp]# docker run -v /home/dockerimg/myapp:/usr/src/myapp -w /usr/src/...
  • jenkins执行python脚本

    2018-10-20 21:01:53
    最新在研究使用jenkins做升级发布功能,大概的操作是选择产品、模块、环境等参数后,执行一个python脚本,脚本获取用户选择参数,然后执行发布动作。jenkins执行python脚本,需要使用python plugin具体使用方法:1、...
  • xshell 运行python脚本

    千次阅读 2019-10-17 02:29:08
    xshell 运行python脚本 import sys sys.path.append('C:\\Python36\\Lib\\site-packages\\') from random import Random import xlwt, xlrd, time, json from xlutils.copy import copy from copy import deepcopy...
  • python脚本中执行另一个python脚本

    千次阅读 2020-03-20 11:32:01
    需求:将所有测试脚本统一顺序执行,执行结果输出到log.txt import os os.system("python WIFI_01.py>log.txt") os.system("python WIFI_02.py>>log.txt") os.system("python WIFI_03.py>>log.txt") ...
  • Linux shell脚本执行Python脚本

    万次阅读 2017-04-17 16:14:10
    今天想做个定时器,用shell脚本执行Python脚本 shell 里面是这样写python main.py 之后就报错误 :No module named 看了一篇博客解决了问题: 使用Python的时候最好指定地址:/usr/local/bin/python2.7 main.py...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,428
精华内容 41,371
关键字:

python脚本

python 订阅