最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3通過subprocess模塊調(diào)用腳本并和腳本交互的操作

 更新時(shí)間:2020年12月05日 14:33:30   作者:齊夢(mèng)星空  
這篇文章主要介紹了python3通過subprocess模塊調(diào)用腳本并和腳本交互的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

因工作需要,需實(shí)現(xiàn)如題所示功能。查閱網(wǎng)上博客,資料,大多都是針對(duì)python2的,而且很多地方不明所以,所以自己整理了一下查閱的結(jié)果,重新寫一篇博客。

預(yù)備知識(shí)

1、python3的默認(rèn)字符串類型

Python 2.x 同時(shí)支持ASCII和 Unicode字符串,默認(rèn)情況下是ASCII編碼。而 Python 3中這種支持剛好調(diào)換:Unicode現(xiàn)在變成了默認(rèn)類型,而 ASCII 字符串現(xiàn)在稱為 bytes。 bytes 數(shù)據(jù)結(jié)構(gòu)包含字節(jié)值,并且它

不應(yīng)該再被視為一個(gè)字符串,因?yàn)樗且粋€(gè)包含數(shù)據(jù)的不可變字節(jié)數(shù)組

上面這句話出自《python核心編程》(第三版)。這造成了python2和python3的很大的不兼容性。就是很多方法在python2中可用,但是在python3中不可用。幸運(yùn)的是python提供了解決這種問題的方法。

如果想把默認(rèn)字符串轉(zhuǎn)換成bytes類型,既把Unicode變成ASCII

# 方法一
bytes("str",encoding="utf8") # encoding="utf8"參數(shù)不可省略
egg:
 bytes("中國(guó)",encoding="gbk")
 b'\xd6\xd0\xb9\xfa'
 bytes("中國(guó)",encoding="utf-8")
 b'\xe4\xb8\xad\xe5\x9b\xbd'
#方法二
"str".encode(encoding="utf8") # encoding="utf8"可省略,因?yàn)橐呀?jīng)是默認(rèn)參數(shù)
egg:
 "中國(guó)".encode(encoding="gbk")
 b'\xd6\xd0\xb9\xfa'
 "中國(guó)".encode(encoding="utf8")
 b'\xe4\xb8\xad\xe5\x9b\xbd'
 
#上面兩種方法的意思是一樣的,就是按某種編碼的方式,將Unicode轉(zhuǎn)變成ASCII。其中utf8是Unicode碼的一種存儲(chǔ)類型或者實(shí)現(xiàn)類型(這個(gè)不是很清楚),常見的還有utf16等

如果想把bytes字符串轉(zhuǎn)換成Unicode類型

bytes.decode( bytes碼,encoding="編碼方式" ) # bytes碼的一般格式是 : b+字符串,如 b'abc'
egg:
 bytes.decode(b'\xe4\xb8\xad\xe5\x9b\xbd',encoding="utf-8")
 '中國(guó)'
 bytes.decode(b'\xd6\xd0\xb9\xfa',encoding="gbk")
 '中國(guó)'

2、sys模塊的stdout,stdin,stderr*

sys.stdout.write(str) #將字符串str寫入pipe,因?yàn)閜ipe的默認(rèn)出口是終端,所以這句等價(jià)于 :print(str)
sys.stdin.readline() #從pipe讀入一行數(shù)據(jù),因?yàn)閜ipe的默認(rèn)入口是終端,所以這里可以從終端輸入數(shù)據(jù)

# 此外,需要注意的是這里的str使用unicode類型的字符串即可,不需要bytes類型的字符串

正式內(nèi)容

建立文件src/main.py

 import subprocess as sub
 import sys

 popen = sub.Popen("python ./test.py", stdin=sub.PIPE, stdout=sub.PIPE, stderr=sub.PIPE) #將輸入,輸出,錯(cuò)誤都定向到新的pipe

 for line in sys.stdin: # 讀取終端輸入
  popen.stdin.write(line.encode(encoding="utf8")) # 寫入pip,write的參數(shù)要是bytes類型
  popen.stdin.flush() #必須
  output = popen.stdout.readline() #從子進(jìn)程讀取數(shù)據(jù),讀到的結(jié)果是bytes類型
  sys.stdout.write(bytes.decode(output)) # sys模塊stdout的參數(shù)要求是字符串,所以要解碼,相當(dāng)于print(out)

建立文件src/test.py,

import sys

while True:
 line = sys.stdin.readline() #讀取父進(jìn)程寫入的內(nèi)容
 sys.stdout.write(line) #將讀到的內(nèi)容返回給父進(jìn)程,可喲用print代替
 # 注意:子進(jìn)程的內(nèi)容是無法打印的,其輸出的任何信息都會(huì)發(fā)送給父進(jìn)程,所以我們通過輸出判斷l(xiāng)ine變量是bytes類型還是unicode類型,但是根據(jù)上一個(gè)文件的sys.stdout.write(bytes.decode(output)語(yǔ)句可知應(yīng)該是str類型。

補(bǔ)充知識(shí):python中多進(jìn)程子進(jìn)程使用input()為什么運(yùn)行會(huì)報(bào)EOFError

關(guān)于python3多進(jìn)程中,子進(jìn)程中從鍵盤錄入值,運(yùn)行報(bào)錯(cuò)問題。

在python中,主進(jìn)程允許從鍵盤錄入值。而子進(jìn)程是不允許的。

以上這篇python3通過subprocess模塊調(diào)用腳本并和腳本交互的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pycharm安裝opencv-python報(bào)錯(cuò)的解決

    pycharm安裝opencv-python報(bào)錯(cuò)的解決

    本文主要介紹了pycharm安裝opencv-python報(bào)錯(cuò)的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python 的numpy庫(kù)中的mean()函數(shù)用法介紹

    python 的numpy庫(kù)中的mean()函數(shù)用法介紹

    這篇文章主要介紹了python 的numpy庫(kù)中的mean()函數(shù)用法介紹,具有很好對(duì)參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 深入解析Python中的多進(jìn)程

    深入解析Python中的多進(jìn)程

    這篇文章主要介紹了深入解析Python中的多進(jìn)程,“Python中的多進(jìn)程是通過multiprocessing包來實(shí)現(xiàn)的,和多線程的threading.Thread差不多,它可以利用multiprocessing.Process對(duì)象來創(chuàng)建一個(gè)進(jìn)程對(duì)象
    2022-06-06
  • 在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)

    在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)

    在PyCharm中打包Python項(xiàng)目并運(yùn)行到服務(wù)器上,主要步驟包括:創(chuàng)建并設(shè)置項(xiàng)目、編寫項(xiàng)目代碼、打包項(xiàng)目、配置服務(wù)器環(huán)境、上傳可執(zhí)行文件到服務(wù)器以及運(yùn)行項(xiàng)目,通過這些步驟,可以將Python項(xiàng)目打包并部署到服務(wù)器上
    2024-11-11
  • Python轉(zhuǎn)換itertools.chain對(duì)象為數(shù)組的方法

    Python轉(zhuǎn)換itertools.chain對(duì)象為數(shù)組的方法

    這篇文章主要介紹了Python轉(zhuǎn)換itertools.chain對(duì)象為數(shù)組的方法,通過代碼給大家介紹了itertools 的 chain() 方法,需要的朋友可以參考下
    2020-02-02
  • Python BeautifulSoup [解決方法] TypeError: list indices must be integers or slices, not str

    Python BeautifulSoup [解決方法] TypeError: list indices must be

    這篇文章主要介紹了Python BeautifulSoup [解決方法] TypeError: list indices must be integers or slices, not str,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊

    Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊

    這篇文章介紹了Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • k-means 聚類算法與Python實(shí)現(xiàn)代碼

    k-means 聚類算法與Python實(shí)現(xiàn)代碼

    這篇文章主要介紹了k-means 聚類算法與Python實(shí)現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python3中類、模塊、錯(cuò)誤與異常、文件的簡(jiǎn)易教程

    Python3中類、模塊、錯(cuò)誤與異常、文件的簡(jiǎn)易教程

    這篇文章主要給大家介紹了關(guān)于Python3中類、模塊、錯(cuò)誤與異常、文件的相關(guān)教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 利用Python自動(dòng)生成PPT的示例詳解

    利用Python自動(dòng)生成PPT的示例詳解

    在日常工作中,PPT制作是常見的工作。這篇文章主要為大家詳細(xì)介紹了如何利用Python自動(dòng)生成PPT,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-07-07

最新評(píng)論

筠连县| 昆明市| 札达县| 元氏县| 桦甸市| 邳州市| 平遥县| 舞钢市| 松溪县| 广州市| 江都市| 亚东县| 景东| 贵溪市| 濮阳县| 平安县| 靖江市| 五华县| 延津县| 同江市| 佛教| 陇川县| 阿合奇县| 秭归县| 马山县| 葵青区| 大丰市| 汝阳县| 荥阳市| 马公市| 英德市| 武清区| 东港市| 福安市| 乾安县| 渝中区| 左贡县| 广德县| 南京市| 山阴县| 镇平县|