婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python中使用subprocess庫創建附加進程

Python中使用subprocess庫創建附加進程

熱門標簽:激戰2地圖標注 廣告地圖標注app 唐山智能外呼系統一般多少錢 白銀外呼系統 海南400電話如何申請 騰訊外呼線路 公司電話機器人 哈爾濱ai外呼系統定制 陜西金融外呼系統

前言

subprocess庫提供了一個API創建子進程并與之通信。這對于運行生產或消費文本的程序尤其有好處,因為這個API支持通過新進行的標準輸入和輸出通道來回傳數據。

本篇,將詳細介紹Python創建附加進行的庫:subprocess。

run(運行外部命令)

subprocess庫本身可以替換os.system(),os.spawnv()等函數?,F在我們來通過subprocess庫運行一個外部命令,但不采用os.system()。示例如下:

import subprocess

completed = subprocess.run('whoami')
print(completed.returncode)

這里我們運行了一個windows系統常用的whoami命令,返回當前用戶的名稱,輸出如下:

這里,我們使用了subprocess.run調用了子進程運行windows命令。它返回一個CompletedProcess實例,它包含了與進行有關的信息。returncode為子進程的退出狀態碼。通常情況下,退出狀態碼為0則表示進程成功運行了;一個負值-N表示這個子進程被信號N終止了。

該函數還有許多參數,比如shell,默認值為False表示直接運行命令,如果主動賦值為True則會創建一個中間shell進程,由這個進程運行命令。

import subprocess

completed = subprocess.run('echo 123',shell=True)
print(completed.returncode)

比如這里,我們打印123。

該庫還有一個call()函數,subprocess.run有一個check參數,如果沒有設置該參數,等價于調用了call()函數。check默認值為False。

對于run()函數啟動的進程,它的標準輸入輸出通道會綁定到父進程的輸入輸出。這說明調用程序無法捕獲命令的輸出。不過,我們可以通過為stdout和stderr參數傳入PIPE來捕獲輸出,以備以后處理。

import subprocess

completed = subprocess.run('whoami',stdout=subprocess.PIPE)
print(completed.returncode)
print(len(completed.stdout))
print(completed.stdout.decode('UTF-8'))

運行之后,效果如下:

如果設置run()函數的參數check=True與stdout為PIPE,等價于調用了check_output()函數。

通過Shell返回消息

本例會通過一個子shell運行命令,在命令返回錯誤碼并退出之前,將詳細輸入到控制臺。實例如下:

import subprocess

try:
    completed = subprocess.run(
        'echoa 123',
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE, )
except subprocess.CalledProcessError as err:
    print("ERROR:", err)
else:
    print("else")
    print(completed.returncode)
    print(len(completed.stdout))
    print(completed.stdout.decode('UTF-8'))
    print(len(completed.stderr))
    print(completed.stderr.decode('gbk'))

運行之后,效果如下:

這里我們輸入了一個錯誤的命令,可以看到因為命令錯誤,并沒有輸出命令的執行結果,0和64中間就是completed.stdout,為空。而命令將錯誤消息返回了。這是因為我們設置了stdout與stderr為subprocess.PIPE,表明這些通道要開放。這樣我們才能獲取子shell運行的結果獲取所運行的錯誤提示。(讀者可以將命令改正確后可以發現錯誤消息沒有了,正確執行結果會輸出。這就是subprocess庫創建進程的通信機制)

需要注意的是,如果需要抑制輸出效果,可以將stdout與stderr設置為subprocess.DEVNULL。不過改了之后,上面代碼肯定會報錯,因為管道關閉,通信也就關閉了。也就是沒有這些參數了。

直接處理管道

subprocess庫還有一個非常重要的類Popen,它是用來建立其他API的底層API,對更復雜的進程交互很有用。

比如run(),call(),check_call()和check_output()函數都是Popen類的包裝器。直接使用Popen可以更好的控制如何運行命令以及如何處理輸入和輸出流。Popen的構造函數利用參數建立新進程,使父進程可以通過管道與之通信。

下面,我們來分別介紹進程間通信的方式。

與進程的單項通信

要運行一個進程并讀取它的所有輸出,可以設置stdout為PIPE并調用communicate()函數。示例如下:

import subprocess

prc = subprocess.Popen('whoami', stdout=subprocess.PIPE)
stdout_value = prc.communicate()[0].decode('utf-8')
print(repr(stdout_value))

如上面代碼所示,Popen會在內部管理數據讀取。運行之后,效果如下:

如果你需要調用一個管道,并完成寫數據的操作,可以設置stdin為PIPE。

import subprocess

prc = subprocess.Popen(["cmd", "/c", 'type', '-'], stdin=subprocess.PIPE)
prc.communicate('stdin'.encode('UTF-8'))

與進程的雙向通信

要完成進程的雙向通信,可以直接將stdin與stdout都設置為PIPE即可。示例如下:

import subprocess

cmd = "cmd /c type E:/Project/debug.log"
cmd.encode('utf-8')
prc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
msg = 'stdin'.encode('UTF-8')
stdout_value = prc.communicate(msg)[0].decode('utf-8')
print(repr(stdout_value))

至于如果命令行錯誤需要捕獲錯誤消息,可以直接將stderr也設置為PIPE。

連接管道段

在Linux系統中,我們可以將多個命令連接成一個管線,即可以把它們的輸入輸出串聯在一起。通過Popen我們也可以完成類似的操作,只需要將一個Popen實例的stdout屬性被用左管線中下一個Popen實例的stdin參數即可。至于最后肯定還是要設置為PIPE,畢竟我們還是要獲取多個管道段消息結果,示例如下:

import subprocess

cmd1 = "cmd /c type E:/Project/debug.log"
proc1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE, encoding='utf-8')

cmd2 = "tree /F | findstr 拒絕訪問"
proc2 = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stdin=proc1.stdout, encoding='utf-8')

result = proc2.stdout

for line in result:
    print(line.decode('utf-8').strip())

sys的命令交互

在我們學習Python時,一般使用input()進行用戶輸入數據。但是其實sys庫也可以進行輸入輸出判斷,但它涉及的是進程間的交互,示例如下:

import sys

sys.stderr.write('開始\n')
sys.stderr.flush()

while True:
    next_line = sys.stdin.readline()
    sys.stderr.flush()
    if next_line.strip() == "9599":
        break
    sys.stdout.write(next_line)
    sys.stdout.flush()
sys.stderr.write('結束\n')
sys.stderr.flush()

運行之后,效果如下:

到此這篇關于Python中使用subprocess庫創建附加進程的文章就介紹到這了,更多相關Python附加進程內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python實現系統交互(subprocess)
  • Python實現subprocess執行外部命令
  • 解決python subprocess參數shell=True踩到的坑
  • Python中Subprocess的不同函數解析
  • python中subprocess實例用法及知識點詳解

標簽:鷹潭 惠州 四川 益陽 上海 黑龍江 常德 黔西

巨人網絡通訊聲明:本文標題《Python中使用subprocess庫創建附加進程》,本文關鍵詞  Python,中,使用,subprocess,庫,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python中使用subprocess庫創建附加進程》相關的同類信息!
  • 本頁收集關于Python中使用subprocess庫創建附加進程的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美中日韩| 欧美日韩高清在线播放| 欧洲一区二区三区在线| 精品国产免费一区二区三区四区 | 国产综合色视频| 在线看国产一区| 中国av一区二区三区| 美国十次综合导航| 欧美日韩成人综合在线一区二区| 在线国产亚洲欧美| 欧美美女直播网站| 亚洲视频在线一区二区| 成人永久aaa| 在线观看网站黄不卡| 中文一区二区在线观看| 国产中文字幕精品| 欧美一区日韩一区| 日韩成人av影视| 欧美日韩久久一区二区| 亚洲午夜成aⅴ人片| 日本不卡不码高清免费观看| 欧洲视频一区二区| 亚洲精品高清视频在线观看| 天天操天天色综合| 欧美日韩在线不卡| 亚洲成a人片在线不卡一二三区| 美脚の诱脚舐め脚责91| 91精品欧美综合在线观看最新 | 欧美日韩久久不卡| 亚洲另类在线视频| 91极品视觉盛宴| 性做久久久久久| 在线播放视频一区| 久久黄色级2电影| 丁香婷婷综合五月| 欧美日韩日本视频| 日韩高清不卡一区| 日韩精品在线一区二区| 国内一区二区视频| 欧美日韩中文字幕一区二区| 久久久久久久国产精品影院| 东方aⅴ免费观看久久av| 中文字幕一区二区三区蜜月| 日产欧产美韩系列久久99| 高清不卡一二三区| 欧美午夜片在线看| 国产人成一区二区三区影院| 国产91色综合久久免费分享| 国产精品久久久久久久第一福利| 日韩电影在线观看电影| 91精彩视频在线| 欧美国产日韩精品免费观看| 91免费在线看| 国产午夜精品在线观看| 成人精品免费视频| 国产亚洲欧洲997久久综合| 亚洲国产成人av网| 不卡的av网站| 久久久国产一区二区三区四区小说 | 蜜桃久久久久久| 欧美专区在线观看一区| 国产欧美日韩麻豆91| 热久久一区二区| 欧美午夜一区二区三区 | 久久亚洲春色中文字幕久久久| 亚洲图片自拍偷拍| 99久久精品免费精品国产| 亚洲精品乱码久久久久久| 99在线热播精品免费| 久久精品一区二区三区不卡| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品免费看片| 777奇米四色成人影色区| 懂色av一区二区三区蜜臀| 国产亚洲一区二区在线观看| 91激情五月电影| 国产成人欧美日韩在线电影 | 亚洲精品久久久蜜桃| 日韩亚洲欧美在线观看| 91蝌蚪porny| 看电视剧不卡顿的网站| 亚洲一区二区三区在线看| www成人在线观看| 91精品国产免费| 在线观看免费亚洲| 成人h动漫精品一区二| 国产精品久久久久久久久果冻传媒| 成人爱爱电影网址| 国产一区二区福利| 国产精品黄色在线观看| 精品国产123| 这里只有精品免费| 国模娜娜一区二区三区| 国产人成一区二区三区影院| 日韩女优电影在线观看| 国产成人自拍在线| 国产在线一区观看| 麻豆精品视频在线观看免费| 国产欧美精品区一区二区三区| 日韩欧美一区二区三区在线| 欧美日韩国产首页| 欧美日韩1区2区| 欧美吞精做爰啪啪高潮| 色综合久久久久久久| 99精品1区2区| 美女诱惑一区二区| 看国产成人h片视频| 久草中文综合在线| 国产在线精品一区二区| 国内一区二区视频| 亚洲一区av在线| 亚洲va天堂va国产va久| 五月天一区二区三区| 国产性天天综合网| 欧美三级乱人伦电影| 欧美日韩免费不卡视频一区二区三区| 在线免费不卡视频| 欧美日韩视频在线一区二区 | 欧洲日韩一区二区三区| 国产在线视频一区二区三区| 精品制服美女丁香| 亚洲一区在线播放| 日本视频在线一区| 亚洲日本欧美天堂| www激情久久| 国产精品女上位| 精品999久久久| 欧美日韩欧美一区二区| 91精品国产综合久久小美女| 久久综合九色综合欧美98 | 精品午夜一区二区三区在线观看| 粉嫩蜜臀av国产精品网站| 99视频精品在线| 欧美揉bbbbb揉bbbbb| 久久午夜老司机| 日韩一区二区三区四区五区六区| 99久久免费视频.com| 激情六月婷婷久久| 成人久久18免费网站麻豆| 91精品免费在线观看| 精品国产91九色蝌蚪| 日韩欧美国产一区二区三区| 国产亚洲午夜高清国产拍精品| 中文字幕日韩精品一区| 日日欢夜夜爽一区| 一区二区在线免费观看| 国产精品视频线看| 亚洲成av人片一区二区三区| 激情偷乱视频一区二区三区| 青青青爽久久午夜综合久久午夜 | 九一久久久久久| 蜜臀va亚洲va欧美va天堂| 国产.欧美.日韩| 欧美狂野另类xxxxoooo| 国产欧美日韩激情| 日韩vs国产vs欧美| 青青草国产精品亚洲专区无| 亚洲电影你懂得| 国产精品自拍在线| 福利一区二区在线| 欧美日韩在线不卡| 中文字幕一区二区在线观看| 美女尤物国产一区| 欧美人妇做爰xxxⅹ性高电影 | 色爱区综合激月婷婷| 精品成人一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲小少妇裸体bbw| 亚洲丝袜美腿综合| 一片黄亚洲嫩模| 国产成人av一区二区三区在线 | 精品一区二区影视| 国产一区二区网址| 国产成人精品在线看| 成人精品电影在线观看| 色综合色狠狠综合色| 国产人伦精品一区二区| 一区二区国产视频| 成人av在线资源网| 国产目拍亚洲精品99久久精品| 中文字幕一区二区三区精华液| 亚洲欧美日韩一区| 成人福利视频在线| 欧美日韩国产首页| 一区av在线播放| 久久97超碰色| 精品国产欧美一区二区| 九九精品视频在线看| 久久久蜜臀国产一区二区| 九九热在线视频观看这里只有精品| 成人自拍视频在线观看| 国产视频亚洲色图| 亚洲午夜三级在线| 国产一区二区三区香蕉| 色综合天天做天天爱| 亚洲四区在线观看| 在线观看日韩毛片| 国产欧美日韩亚州综合 | 97久久久精品综合88久久| |精品福利一区二区三区|