有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块中的popen方法去执行
本文介绍一个exe打包工具pyinstaller,使用非常简单、方便,而且还跨平台。
利用SSH或者Zabbix监控,配合Django开发框架,改造出属于自己的监控平台,实现包括主机图形,自动发现,计划任务,批量cmd执行,服务监控,日志监控等功能,由于公司机器混乱,基本上市面上的所有设备都能找到,监控这些不同型号不同系统的主机需要分别对待,我们就借助各种开源项目来做一个简单的巡检工具,方便工作需要。
在一些项目中,我们会需要在生成完文件后打开某些文件或者文件夹窗口,这就需要使用到内置的文件打开方式了。
友情提示(本公众号实测系列请保存成书签,都是原创的宝贵的踩坑经验。比网上那些各种复制粘贴,只言片语,断文取义,不知原理的所谓教程要强得多。)
目录[-] 在使用pytesser做图片文字识别时遇到 WindowsError: [Error 2] 错误,报错内容如下: Traceback (most recent call last): File "E:/Code/Captcha/ChinaMobileEC/recogCaptcha.py", line 37, in <module> print pytesser.image_to_string(out) File "E:\Code\Captcha\pytesser\pytess
最近看了一些大佬发的关于可视化打包工具auto-py-to-exe文章,auto-py-to-exe是基于pyinstaller,但相比于pyinstaller,它多了 GUI 界面。我自己也试了一下,感觉确实好用且方便,动动手指就能对程序进行打包。
subprocess包主要功能是执行外部命令(相对Python而言)。和shell类似。
subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。
在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。
Subprocess库是Python中用于创建和管理子进程的标准库。它提供了一个强大而灵活的接口,使得你可以在Python中启动新的进程、连接它们的输入和输出,并与它们进行交互。本教程将介绍Subprocess库的基本概念、用法和一些常见的应用场景。
当我们须要调用系统的命令的时候,最先考虑的os模块。用os.system()和os.popen()来进行操作。可是这两个命令过于简单,不能完毕一些复杂的操作,如给执行的命令提供输入或者读取命令的输出,推断该命令的执行状态,管理多个命令的并行等等。这时subprocess中的Popen命令就能有效的完毕我们须要的操作。在这里对Popen予以简介。
受 Sysinternals 的“Autoruns”的启发,RCLocals 分析所有 Linux 启动可能性以查找后门,还执行进程完整性验证、扫描 DLL 注入进程等等
从知道python开始,我的视线里就没缺少过他。尤其是现如今开发语言大有傻瓜化的趋势。而作为这一趋势的领导,脚本语言就显得格外亮眼。不管是python还是ruby,perl,都火的不得了。就连java都出了个脚本语言版本,好像是叫Groovy,号称下一代的java。
通过使用subprocess和threading模块,您还可以编写按计划启动其他程序的程序。通常,最快的编程方式是利用他人已经编写的应用。
通过subprocess.Popen调用系统的ping.exe,获得ping结果文本,再通过正则表达式从结果文本中提取需要的参数。需要考虑中文和英文两种返回结果。
subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn、os.popen、commands.*等subprocess通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。
stdin.close() —> 写入之后必须关闭或flush 才可以读取到数据
subprocess.Popen 是 Python 中用于执行外部命令或程序的模块之一。它提供了创建子进程并与之交互的灵活方式。以向 subprocess.Popen 传递一个命令字符串或命令列表,它将调用操作系统的 shell 来执行该命令。
python的子进程嘛,就是利用python打开一个子进程(当然像是一句废话),但是可能和我们理解的不太一样。
commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态;
做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下:
修正文件路径包含空格时找不到文件的问题,这个如果自己写的话应该是可以避免的。发现一个比较奇怪的问题,在win7下subprocess.Popen竟然不显示cmd窗口,但是在xp下显示。这是为什么? :8
subprocess.Popen(['google-chrome',"http://www.baidu.com"])可打开chrome并显示百度网页。
1 os与commands模块 2 subprocess模块 3 subprocess.Popen类
在python 中调用系统命令,如果使用subprocess.Popen() 模块,按照命令参数的的形式,可以分两种:
把.apk包放入apk目录下,然后进入到install_apk_once_many.py所在目录,运行程序:
subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码。这个模块的目的在于替换几个旧的模块和方法,如:
1、os.system(command)或者os.popen(..........)
以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。
在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system()
1、os.system() 此方法执行的外部程序,会将结果直接输出到标准输出。os.system的返回结果为执行shell 的 $? 值。 因此请执行没有输出结果的程序时适合使用此方法。如touch
最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下:
subprocess模块
公司直播间直播课程,有时会出现发题、金币刷新等卡顿问题,为了解释不是网络而是接口或者服务问题,此程序诞生。 因为不带多线程版本 ping 程序挂钩多个 ip 的话,容易出现时间缺失(如下),所以加上多线程,同时程序简化了很多……
1、添加APP接口 请求方式:POST 传送数据类型:JSON 请求URL:http://192.168.1.115:5000/newapp 请求参数:{'appName':程序别名} 返回数据类型:字符串 返回结果: 返回 "1" 添加成功 返回 "2" 程序已存在 返回 "0" 添加失败 2、删除APP接口 请求方式:POST 传送数据类型:JSON 请求URL:http://192.168.1.115:5000/delapp 请求参数:{'appName':程序别名} 返回数据类型:字符串 返回结果: 返回 "1" 删除成功 返回 "2" 删除失败 返回 "0" app不存在 3、获取已添加的APP列表 请求方式:GET 请求URL:http://192.168.1.115:5000/getapp 请求参数:无参数 返回数据类型:json 返回数据:['app1','app2','app3'] 4、获取可进行添加的APP列表(包含已添加)的APP列表 请求方式:GET 请求URL:http://192.168.1.115:5000/getapp 请求参数:无参数 返回数据类型:json 返回数据:{'all':{'app1别名':'app1中文名','app2别名':'app2中文名'}}
这里的内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部的命令和程序。比如说,我需要使用wget下载文件。我在Python中调用wget程序。从这个意义上来说,subprocess的功能与shell类似。 subprocess以及常用的封装函数 当我们运行python的时候,我们都是在创建并运行一个进程。正如我们在Linux进程基础中介绍的那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess
subprocess.call 是 os.system 的替代方案,提供更多的控制。
subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。 Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。
subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands.*等。subprocess通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。
subprocess模块 允许你生成一个或多个进程,并且可以跟它交互,并且获取返回的结果,这个模块想要替换掉几个老的方法: os.system os.spawn* 所以以后跟系统交互的命令,尽量用subprocess 建议调用subprocess的run()方法去跟系统进行调用,更高级的方法,使用popen() ;run()方法其实就是封装的popen。 run()方法在python3.5才有,python2.x没有,2.x用subprocess.call
以下函数是调用子进程的推荐方法,所有使用场景它们都能处理。也可用Popen以满足更高级的使用场景
# -*- coding: CP936 -*- import subprocess cmd="cmd.exe" begin=101 end=110 while begin<end: #reload(sys) #sys.setdefaultencoding('CP936') p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) p.stdin.write
python在linux下的反弹shell代码我相信很多人都见过:
这里使用的是最简易的方式,使用python的子进程管理模块,调用系统的ping命令,代码如下:
正常的 os.system() 执行完后只会返回个执行状态值,返回的 0 表示执行成功,1 表示执行失败。 如果想要获取到执行后的结果集,就需要用到管道命令 os.popen(),然后用 read() 方法可以读到返回的结果。subprocess.Popen() 命令也可以获取返回的结果。
场景 使用 Python 执行 Shell 命令(或者脚本),有两种执行场景: 等待,直到命令执行完毕,一次性获取返回结果,做一些你想做的事情; 命令执行的同时,实时获取命令的持续输出,做一些你想做的事情。 例子 第一种场景:ls -a (list segment,Unix系统中使用非常频繁的命令)用于列出所有文件,文件列出之后就自动退出了。 第二种场景:ping zhihu.com 它会持续的输出结果,并不会退出(当然可以加 -t n 来指定 n 次之后结束退出,这样就属于场景一了,本文我们不指定 n)
我们知道,照相机的原理是将一个三维场景投影到二维平面。所谓视觉三维重建,顾名思义就是从已有的二维图像中复原原始三维场景。
本教程将介绍一些自动执行OS命令的Python技术。我们将展示使用Python(os,subprocess)执行命令的两种方法。
使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个文件句柄,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
领取专属 10元无门槛券
手把手带您无忧上云