python shell指令碼(主要講管道操作的支援)
阿新 • • 發佈:2019-02-18
這裡提供的只是一個支援管道的命令執行介面, 至於獲取命令, 擴充套件自己的命令, 就不再贅述.
對於系統的命令, 可以直接呼叫這個介面方法, 多個命令支援管道操作. 發生錯誤時, 引發OSError.
1. 判斷傳入命令是否是字串型別
2. 傳入的每個命令.
3. 遍歷所有命令.
4. 獲取每個命令的命令及引數
5. 動態執行Popen, 並將返回值放入列表popens中
6. 動態執行構建的Popen, 第一個只有stdin不使用管道, 最後一個stdout指定為sys.stdout. 其餘的都是PIPE
7. 遍歷取出Popen物件, 將前一個物件的stdout寫入到後一個物件的stdin中.
如下圖, 解釋了ls /bin | more | grep ^m命令怎麼樣執行管道操作.
其實, 管道說來也很簡單的, 和理解流是一樣的, 前一個流的輸出作為後一個流的輸入而已. 在這個指令碼中, 第一個命令執行時, 沒有輸入, 後面每個命令都會將前一個命令的輸出作為輸入....直到最後一個命令執行時, 我們將輸出指向了標準輸出, 所以執行的結果就和我們平時執行命令列命令一樣.
管道, 流......講的更通俗一點, 那就是水流了嘛, 接水管的遊戲相比大家都玩過, 那麼複雜的管道都能接出來, 還怕I/O中那幾個小小的管道??