国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python進程類subprocess的一些操作方法例子

2019-11-25 18:04:28
字體:
來源:轉載
供稿:網友

subprocess.Popen用來創建子進程。

1)Popen啟動新的進程與父進程并行執行,默認父進程不等待新進程結束。

復制代碼 代碼如下:

def TestPopen():
  import subprocess
  p=subprocess.Popen("dir",shell=True)
  for i in range(250) :
    print ("other things")

2)p.wait函數使得父進程等待新創建的進程運行結束,然后再繼續父進程的其他任務。且此時可以在p.returncode中得到新進程的返回值。

復制代碼 代碼如下:

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())

3) p.poll函數可以用來檢測新創建的進程是否結束。

復制代碼 代碼如下:

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())

4) p.kill或p.terminate用來結束創建的新進程,在windows系統上相當于調用TerminateProcess(),在posix系統上相當于發送信號SIGTERM和SIGKILL。

復制代碼 代碼如下:

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")

5) p.communicate可以與新進程交互,但是必須要在popen構造時候將管道重定向。

復制代碼 代碼如下:

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)

6) call函數可以認為是對popen和wait的分裝,直接對call函數傳入要執行的命令行,將命令行的退出code返回。

復制代碼 代碼如下:

def TestCall():
  retcode = subprocess.call("c://test.bat")
  print (retcode)

7)subprocess.getoutput 和 subprocess.getstatusoutput ,基本上等價于subprocess.call函數,但是可以返回output,或者同時返回退出code和output。

但是可惜的是好像不能在windows平臺使用,在windows上有如下錯誤:'{' is not recognized as an internal or external command, operable program or batch file.

復制代碼 代碼如下:

def TestGetOutput():
  outp = subprocess.getoutput("ls -la")
  print (outp)

def TestGetStatusOutput():
  (status, outp) = subprocess.getstatusoutput('ls -la')
  print (status)
  print (outp)

8)總結

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.*

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柳河县| 鞍山市| 原平市| 双牌县| 马边| 邹城市| 桐庐县| 大英县| 裕民县| 河池市| 镇平县| 涪陵区| 金堂县| 通州区| 永年县| 安岳县| 普安县| 正镶白旗| 宽甸| 夹江县| 蕉岭县| 沙河市| 满洲里市| 虞城县| 嘉鱼县| 西乌珠穆沁旗| 芜湖县| 西藏| 门源| 兖州市| 江口县| 汽车| 伊春市| 新巴尔虎右旗| 浦县| 弥渡县| 麦盖提县| 武山县| 湘潭县| 同仁县| 文安县|