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