源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

python进程类subprocess的一些操作方法例子

  • 时间:2020-04-02 22:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python进程类subprocess的一些操作方法例子
subprocess.Popen用来创建子进程。 [b]1)Popen启动新的进程与父进程并行执行,默认父进程不等待新进程结束。[/b]
[u]复制代码[/u] 代码如下:
def TestPopen():   import subprocess   p=subprocess.Popen("dir",shell=True)   for i in range(250) :     print ("other things")
[b]2)p.wait函数使得父进程等待新创建的进程运行结束,然后再继续父进程的其他任务。且此时可以在p.returncode中得到新进程的返回值。[/b]
[u]复制代码[/u] 代码如下:
def TestWait():   import subprocess   import datetime   print (datetime.datetime.now())   p=subprocess.Popen("sleep 10",shell=True)   p.wait()   print (p.returncode)   print (datetime.datetime.now())
[b]3) p.poll函数可以用来检测新创建的进程是否结束。[/b]
[u]复制代码[/u] 代码如下:
def TestPoll():   import subprocess   import datetime   import time   print (datetime.datetime.now())   p=subprocess.Popen("sleep 10",shell=True)   t = 1   while(t <= 5):     time.sleep(1)     p.poll()     print (p.returncode)     t+=1   print (datetime.datetime.now())
[b]4) p.kill或p.terminate用来结束创建的新进程,在windows系统上相当于调用TerminateProcess(),在posix系统上相当于发送信号SIGTERM和SIGKILL。[/b]
[u]复制代码[/u] 代码如下:
def TestKillAndTerminate():     p=subprocess.Popen("notepad.exe")     t = 1     while(t <= 5):       time.sleep(1)       t +=1     p.kill()     #p.terminate()     print ("new process was killed")
[b]5) p.communicate可以与新进程交互,但是必须要在popen构造时候将管道重定向。[/b]
[u]复制代码[/u] 代码如下:
def TestCommunicate():   import subprocess   cmd = "dir"   p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)   (stdoutdata, stderrdata) = p.communicate()     if p.returncode != 0:         print (cmd + "error !")   #defaultly the return stdoutdata is bytes, need convert to str and utf8   for r in str(stdoutdata,encoding='utf8' ).split("\n"):     print (r)   print (p.returncode) def TestCommunicate2():   import subprocess   cmd = "dir"   #universal_newlines=True, it means by text way to open stdout and stderr   p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)   curline = p.stdout.readline()   while(curline != ""):         print (curline)         curline = p.stdout.readline()   p.wait()   print (p.returncode)
[b]6) call函数可以认为是对popen和wait的分装,直接对call函数传入要执行的命令行,将命令行的退出code返回。[/b]
[u]复制代码[/u] 代码如下:
def TestCall():   retcode = subprocess.call("c:\\test.bat")   print (retcode)
[b]7)subprocess.getoutput 和 subprocess.getstatusoutput ,基本上等价于subprocess.call函数,但是可以返回output,或者同时返回退出code和output。[/b] 但是可惜的是好像不能在windows平台使用,在windows上有如下错误:'{' is not recognized as an internal or external command, operable program or batch file.
[u]复制代码[/u] 代码如下:
def TestGetOutput():   outp = subprocess.getoutput("ls -la")   print (outp) def TestGetStatusOutput():   (status, outp) = subprocess.getstatusoutput('ls -la')   print (status)   print (outp)
[b]8)总结[/b] popen的参数,第一个为字符串(或者也可以为多个非命名的参数),表示你要执行的命令和命令的参数;后面的均为命名参数;shell=True,表示你前面的传入的命令将在shell下执行,如果你的命令是个可执行文件或bat,不需要指定此参数;stdout=subprocess.PIPE用来将新进程的输出重定向,stderr=subprocess.STDOUT将新进程的错误输出重定向到stdout,stdin=subprocess.PIPE用来将新进程的输入重定向;universal_newlines=True表示以text的方式打开stdout和stderr。  其他的不推荐使用的模块: os.system os.spawn* os.popen* popen2.* commands.*
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部