前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyHero爱之初体验(上)~

PyHero爱之初体验(上)~

作者头像
云深无际
发布2021-04-14 12:41:56
5320
发布2021-04-14 12:41:56
举报
文章被收录于专栏:云深之无迹云深之无迹
代码语言:javascript
复制
https://github.com/Splinter0/PyHero

不多逼逼,先上库:

这个是啥?

PyHero是用python编写的软件,可让您从命令行控制GoPro HERO,HERO2,HERO3和HERO4!

我不知道能不能跑的起来~折腾的试试看咧~

先clone一下~看看目录结构

最近爱上了tree命令~看看目录结构

项目里面只有一个图片,我抠下来。安装在这里。

看看里面的目录写的是什么。打开一个shell文件。很明显是一个执行命令,去试试看

如图所示


你可能会说了,好像命令不太一样。因为这个app的编写是linux上面写的,而且还是py2.7时代的产物。别以为现在这么容易的运行,我改了半天代码,~~~~~

继续分析~passwd.txt 自述,输出。里面都没有什么有用的东西~


接下来看脚本文件,干货所在吧~

按照现代程序的代码编写原则,无论多么难得程序。必定是模块化设计,都有main程序处,无论程序语言有没有显式得提供,肯定都是有main这个概念。

开头是导入必要得库~


urllib这个库,文件中是2.我升级到了3.因为是向下兼容么,接着看看这些库是有什么用。

1.urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。urllib中一共有四个模块,分别如下:

request:主要负责构造和发起网络请求,定义了适用于在各种复杂情况下打开 URL (主要为 HTTP) 的函数和类

error:处理异常

parse:解析各种数据格式

robotparser:解析robot.txt文件

2. Python内置库:threading(多线程操作)

Python的线程操作在旧版本中使用的是thread模块,在Python2.7和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,threading模块相较于thread模块,对于线程的操作更加的丰富,而且threading模块本身也是相当于对thread模块的进一步封装而成,thread模块有的功能threading模块也都有,所以涉及到对线程的操作,推荐使用threading模块。

threading模块中包含了关于线程操作的丰富功能,包括:常用线程函数,线程对象,锁对象,递归锁对象,事件对象,条件变量对象,信号量对象,定时器对象,栅栏对象。

3.python commands 模块

commands 模块

通过python调用系统命令 只适用于linux commands是提供linux系统环境下支持使用shell命令的一个模块

那我是不是得删除呢?因为我现在是win平台,先往下看

4.subprocess

一、subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。 subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

subprocess.call() 父进程等待子进程完成 返回退出信息(returncode,相当于Linux exit code)

subprocess.check_call() 父进程等待子进程完成 返回0 检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try…except…来检查

subprocess.check_output() 父进程等待子进程完成 返回子进程向标准输出的输出结果 检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性和output属性,output属性为标准输出的输出结果,可用try…except…来检查。

差不多库就是这样了,继续分析~

vscode双列模式~

代码语言:javascript
复制
def main(): ##主函数
    extra.logo()#extra函数
    call(["clear"])
    passwd = check()#这个地方,我觉得是要输入相机得密码?
    kc = threading.Thread(target=keepConn)
    kc.start()
    print("["+extra.colors.cyan+"*"+extra.colors.end+"] 要查看可用的命令使用 使用 \"help\"\r\n")
    while True:
        command = input(extra.colors.cyan+"#"+extra.colors.green+"GoPro "+extra.colors.end+"> "+extra.colors.end)
        command = command.strip("")
        launch(command, passwd)

main

看一下主要的函数定义,有个大致的框架

这才是真真正正的main函数入口出在这里~


代码语言:javascript
复制
if __name__ == "__main__":  # 启动程序
    try:
        main()
    except KeyboardInterrupt:  # 键盘干扰预防
        print("\r\n["+extra.colors.red+"-" +
              extra.colors.end+"] Quitting ...\r\n")
        time.sleep(1)
        call(["clear"])
        os._exit(1)

这个地方写了一下错误处理,加了一句键盘中断,打印一下退出提示,延时一秒,给子进程信号,向系统发出正常退出信号.



然后创建了一个进程

通过搜索call关键字,看到了4个地方call的调用



先看主函数,定义了一个main函数,写C出身的我表示很舒服~

接着,打印了一个logo,字符的.在另一个py函数里面

代码语言:javascript
复制

class colors:  # DEFINIGN SOME COLORS,定义一些颜色
    black = "\033[90m"
    red = "\033[31m"
    green = "\033[32m"
    yellow = "\033[1;33m"
    magenta = "\033[95m"  # 洋红色
    cyan = "\033[96m"  # 青色
    white = "\033[97m"
    default = "\033[99m"
    end = '\033[0m'


def logo():  # PyHero logo
    print(colors.green+"   ___                            ")
    print("  / _ \_   _  /\  /\___ _ __ ___  ")
    print(" / /_)/ | | |/ /_/ / _ \ '__/ _ \ ")
    print("/ ___/| |_| / __  /  __/ | | (_) |")
    print("\/     \__, \/ /_/ \___|_|  \___/ ")
    print("       |___/                      "+colors.end +
          "By : "+colors.green+"Splinter"+colors.end+"\r\n")
    print("["+colors.cyan+"*"+colors.end +
          "] Welcome to PyHero, a python program to control your GoPro HERO from command line!")
    print("\tThis program has tons of default GoPro commands that you can use, but it also has " +
          colors.green+"special"+colors.end+"\n\tcommands to control your camera better!")
    print("\t"+colors.cyan+"Github Page : "+colors.end +
          "https://github.com/Splinter0/PyHero/\r\n")
    input("[PRESS ENTER]")

运行出来就是这个样子,我现在汉化一下???

对不起了,老外.我忍不住把名字也改了.


等下,程序写的有点不对劲.我需要在Linux下试验一下.这个分析先分析到这里.


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • commands 模块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档