子进程被终止后会抛出TimeoutExpired异常。...子进程被终止后会抛出TimeoutExpired异常。...返回非0值时抛出。...returncode 子进程的退出状态 cmd 用于衍生子进程的命令。 output 如果异常由check_output抛出,则存放子进程的输出。...…… 可配合with使用,退出时,先关闭标准文件描述符,如下 import subprocess if __name__ == '__main__': with subprocess.Popen([
执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(…, check=True)。...执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常。...的封装来实现的高级函数,因此如果我们需要更复杂功能时,可以通过subprocess.Popen来完成。...它们隐式的调用系统shell,并且不保证其他函数所具有的安全性和异常处理的一致性。另外,它们从Python 3.3.4开始才支持Windows平台。...如果在timeout指定的秒数后该进程还没有结束,将会抛出一个TimeoutExpired异常。捕获这个异常,然后重新尝试通信不会丢失任何输出的数据。
subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands.*等。...直接抛出异常 示例: >>> a = subprocess.check_call('df -hT',shell=True) Filesystem Type Size Used Avail Use%...直接返回输出结果,如果返回值不为0,直接抛出异常。...该方法有以下参数: args:shell命令,可以是字符串,或者序列类型,如list,tuple。...cmd_out print cmd_error 也可以使用如下方法: import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE
一 简介 在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,如启动 ,关闭 ,备份数据库...从执行结果上看,子进程 ping命令并未执行完毕,subprocess.Popen()后面的命令就开始执行了。...同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。...那么坑爹的问题来了:当你要使用Python的subprocess.Popen实现命令行之间的管道传输,同时数据源又非常大(比如读取上GB的文本或者无尽的网络流)时,官方文档不建议用wait,同时communicate...自动化运维需求中会有重启/关闭/备份/恢复 MySQL的需求。怎么使用Python的subprocess来解决呢?
执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(..., check=True)。 ...执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常。 ...它们隐式的调用系统shell,并且不保证其他函数所具有的安全性和异常处理的一致性。另外,它们从Python 3.3.4开始才支持Windows平台。...check: 如果check参数的值是True,且执行命令的进程以非0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含 参数、退出状态码、以及stdout和stderr...直接返回输出结果,如果返回值不为0,直接抛出异常。
subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂的交互。 用法: child = subprocess.Popen(["cmd","arg1"...])...5、Popen.terminate():停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。...当需要设置shell=True时(当False时,arges是列表,第一个参数是shell命令,后面的都是参数’,’ 隔开),须把args设为string,空格隔开,如下 >>> a = subprocess.Popen...异常。...subprocess.CalledProcessError异常包括returncode、cmd、output等属性,其中returncode是子进程的退出码,cmd是子进程的执行命令,output为None
命令正常执行返回0,报错则返回1) ret1=subprocess.call("ifconfig") ret2=subprocess.call("ipconfig") #python3.5不是这样,依然会抛出异常导致无法对...shell命令,可以是字符串或者序列类型(如:list,元组) bufsize 指定缓冲。...subprocess.Popen("mkdir t2", shell=True) 终端输入的命令分为两种: 输入即可得到输出,如:ifconfig 输入进行某环境,依赖再输入,如:python import...= obj.stdout.read() obj.stdout.close() cmd_error = obj.stderr.read() obj.stderr.close() print(cmd_out...) print(cmd_error) import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout
shell Linux:参数值为False时,Linux上通过调用os.execvp执行对应的程序。为Trule时,Linux上直接调用系统shell来执行程序。...如果调用命令执行成功,返回结果码0,如果执行失败,抛出CalledProcessError.异常。...如果失败,抛CalledProcessError.异常。...cmd in a shell....对于复杂的命令考虑使用subprocess.Popen()完成,如果仅是简单的命令执行,可以使用os.system()完成,如调用windows的暂停程序命令os.system('pause')。
Example: output = check_output(["ls", "-l", "/dev/null"]) 异常处理: ============== 在新程序开始执行之前子进程抛出异常,...之后父进程重新抛出异常。...最常见的异常是OSError,比如:执行一个不存在的文件,应用程序会抛出OSError异常 如果Popen被无效的参数调用就会抛出‘ValueError’ 如果check_call() and check_output...从标准输出、标准错误读取数据, 直到到达文件尾。等待进程终止。...注意: 如果没有找到执行程序,所有在本节中的函数都有可能以静默状态失败;这个模块会抛出OSError异常 在以下的例子中, 我们假设subprocess 模块是"from subprocess import
原来为了方便维护大家提交上来的脚本任务,运维自己有维护一个统一的脚本,在这个脚本中使用: cmd = 'python /xxx/test.py' os.popen(cmd) 来触发任务,这也是与我在本地...从维基百科中我们也可以看出这个异常产生的一些条件: 其中也提到了 SIGPIPE 信号。...解决办法 既然知道了问题原因,那解决起来就比较简单了,主要有以下几个方案: 使用 read() 函数读取管道中的数据,全部读取之后再关闭。...如果不需要子进程中的输出时,也可以将 command 的标准输出重定向到 /dev/null。 也可以使用 Python3 的 subprocess.Popen 模块来运行。...父子进程是通过匿名管道进行通信的,当读取端关闭时,写入端输出到达管道最大缓存时会收到 SIGPIPE 信号,从而抛出 Broken pipe 异常。 子进程会继承父进程的文件描述符。
cmd == 'quit': break res = subprocess.Popen(cmd, shell=True,...-8') print('cmd:',cmd) if len(cmd)<1 or cmd == 'quit':break res = subprocess.Popen(cmd,...flag = False #防止死循环,在多个客户端连接时,可以去掉 break res = subprocess.Popen(cmd, shell=True,...flag = False #防止死循环,在多个客户端连接时,可以去掉 break res = subprocess.Popen(cmd, shell=True,...,而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据 s.sendall() 发送TCP
唯一需要指定shell=True的场景是要执行的指令是shell内置的,如dir, copy。...wait(timeout=None):如果子进程在timeout后没有终止,抛出TimeoutExpired异常。否则设置returncode属性并返回。...如果子进程在timeout后没有终止,抛出TimeoutExpired异常,但子进程并未kill掉,一个良好的应用应该kill掉子进程并结束交互: proc = subprocess.Popen(......如果未捕获标准错误返回None 方法 check_returncode():如果returncode非0,抛出CalledProcessError异常 异常 subprocess.SubprocessError...()函数捕获到的子进程的错误输出,否则为None subprocess.CalledProcessError check_call()或check_output()函数返回非0状态码时抛出。
subprocess.check_call:运行命令,默认结果是返回值,可以try subprocess.check_out(2.7中才有这个方法) 开启子进程,运行命令,可以获取命令结果,可以try subprocess.Popen..., output=None): self.returncode = returncode self.cmd = cmd self.output = output...(retcode, cmd) #可以抛出异常 return 0 def check_output(*popenargs, **kwargs): if 'stdout' in kwargs...(retcode, cmd, output=output) return output 有时候我们需要在运行命令时可以获取返回值,获取结果,并且能够try。...process = subprocess.Popen(stdout=subprocess.PIPE,shell=True,stderr = subprocess.PIPE,*popenargs, **kwargs
在使用python执行Ant构建时遇到的问题: 使用os.system()调用Ant构建时,不论构建成功还是失败(BUILD SUCCESSFUL/BUILD FAILED),命令行的总是正常退出...0代表正常退出) 查阅相关资料,得知python调用系统命令的函数有:os.system、os.popen、commands.getstatusoutput/getstatus/getoutput、subprocess.Popen...没有执行构建直接退出(退出状态为: 1,输出为: 不是内部或外部命令,也不是可运行的程序或批处理文件) 结论:可能是因为Ant命令不是系统命令的缘故 于是查找资料又得知了subprocess的相关函数,如subprocess.call...执行命令,并等待命令结束,再返回子进程的返回值 subprocess.check_call (*popenargs , **kwargs )执行上面的call命令,并检查返回值,如果子进程返回非0,则会抛出...CalledProcessError异常,这个异常会有个returncode 属性,记录子进程的返回值。
, Returncode:1 subprocess.check_call() 直接打印系统命令的执行结果,使用方法与subprocess.call()相同,只不过该函数会检测返回状态码,如果为1,则会抛出...File "C:\Python3.6\lib\subprocess.py", line 291, in check_call raise CalledProcessError(retcode, cmd...可以结合try...expect...语句做异常处理。...subprocess.check_output() 不会将系统命令的执行结果直接打印出来,返回一个bytes类型的对象,该对象包含了系统命令的执行结果,如果执行失败会抛出subprocess.CalledProcessError... at 0x02230810> 0.06108553745727746 #从时间上看,主程序很快就结束了 Popen()创建的对象方法包括: POPEN1.poll() # 检查子进程状态 POPEN1
shlex, subprocess >>> command_line = raw_input() /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd...', "echo '$MONEY'"] >>> p = subprocess.Popen(args) # Success!...相同,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 Popen.send_signal(signal) 向子进程发送信号。...Popen.terminate() 停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。...在异常对象中,包 括进程的returncode信息。 subprocess模块的内容就这么多。在Python手冊中,还介绍了怎样使用 subprocess来替换一些老的模块,老的函数的样例。
如touch 、rm 一个文件等。...) Return output (stdout or stderr) of executing cmd in a shell....) Return (status, output) of executing cmd in a shell....主要时 shell=False(默认值) 这个参数搞的鬼。 在UNIX中, shell=False 时 subprocess.Popen() 使用os.execvp()去执行响应的子程序。...调用 os.execvp()的时候 ,到$PATH 中去找这个可执行程序,没有找到,所以程序出现了异常。
有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块中的popen方法去执行 这个问题一般是程序内有输入导致的,这个输入可以是input(),也可以是其它的一些stdin操作(如os.popen...实际上会造成输入请求) 本质上就是:使用-w参数(无控制台)打包时程序里不要请求输入 或者,你也可以不用-w参数,手动隐藏控制台!...subprocess官方文档:https://docs.python.org/2/library/subprocess.html 懒得看解释可以直接跳过下面这段,直接看解决方法 args 是一个字符串(如cmd...请看下列示例: proc = subprocess.Popen( 'cmd命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT...命令的输出结果了 稍微封装一下,就可以直接拿来用了 def execute_cmd(cmd): proc = subprocess.Popen( cmd, shell=True,
如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。...同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。...os.makedirs(path) 递归式的创建文件夹 创建已存在的文件夹将异常 os.rmdir(path) 删除一个文件夹 删除非空的文件夹将异常 os.remove() 函数用来删除一个文件...抛出OSError异常。...# -*- coding:utf-8 -*- ''' 打开管理员cmd面板 ''' import subprocess # 方式1:通过runas /savecred subprocess.Popen(
如客户端无法连接到服务端,无法解析服务端返回的数据,读取… 否则可能无法正常调用,抛出连接超时的异常。...语句,匹配成功后异常处理结束,如没有发生异常将匹配else语句,程序结束; 但不管程序是否抛出异常finally语句始终会被执行。...,从而抛出异常(表示一个错误)1.2 异常捕捉当程序出现异常时,如果不处理则会终止程序的运行,如果不想在发生异常时终止程序,则需要使用try来捕捉它,先来看最简单的使用方法:1 name = minutesheep...程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序… 如果key 已存在, 重复注册抛出异常, 具体情况具体分析注销有注册就应该有注销,从字典中移除...input cmd >> pyt 5python 5 100please input cmd >> pyt 48python 4 8 … 抛出异常后,就可以按照前面介绍的try来处理异常。
领取专属 10元无门槛券
手把手带您无忧上云