Python如何獲取Linux管道輸出
Python如何獲取Linux管道輸出
ls | grep a 就把ls的輸出結(jié)果放到grep中處理,尋找含有字母a的項(xiàng)。Python的腳本怎么樣才能獲得類似的效果?下面是學(xué)習(xí)啦小編收集整理的Python如何獲取Linux管道輸出,希望對(duì)大家有幫助~~
Python如何獲取Linux管道輸出
工具/原料
Linux平臺(tái)
基本知識(shí)
1你需要使用sys.stdin.read來獲取管道的輸入。
看下圖的代碼。之所以沒有寫出文本,是希望讀者能自己寫一遍,而不是復(fù)制粘貼。自己動(dòng)手寫一遍必看10遍還更容易記住。
2然后用echo命令把輸出傳給這個(gè)腳本。
你可能會(huì)問為什么多了一個(gè)空行。這是因?yàn)閑cho本身會(huì)給文本加換行符,而print函數(shù)又加了一個(gè)。給print一個(gè)end=""參數(shù)就可以了。
即,print("來自Python的:", sys.stdin.read(), end="")
END
實(shí)戰(zhàn)演練
假如你想要一個(gè)腳本來給輸出的行數(shù)計(jì)數(shù),怎么寫?
例如: ls | count
就把ls的個(gè)數(shù)顯示出來,你就知道有多少個(gè)文件或文件夾了。
代碼如下圖:
主要看第6、7行:
bi = sys.stdin.buffer.read()
由于考慮到文件名的編碼可能不是utf-8,所以直接read可能出現(xiàn)亂碼(準(zhǔn)確地說,不是亂碼,而是UnicodeDecodeError,程序根本運(yùn)行不下去),所以使用了buffer,它的含義是以字節(jié)形式讀取輸出,而不是字符。
li = bi.split(b"\n")[:-1]
以b“\n”為分隔符分了之后,最后一項(xiàng)的空字節(jié),所以要切掉最后一項(xiàng)。
不要擔(dān)心沒有分成幾行的ls的輸出,經(jīng)過測試,即使輸出是一行,它們之間也是用b"\n"分割的。
把腳本改名為 count,放入 ~/bin 后測試一下。
Python如何獲取Linux管道輸出相關(guān)文章:
1.Linux下用Python獲取命令行輸出的幾個(gè)方案