PyHero爱之初体验(上)~

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双列模式~

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函数入口出在这里~


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函数里面


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下试验一下.这个分析先分析到这里.


(0)

相关推荐