1. 程式人生 > >python shell指令碼(主要講管道操作的支援)

python shell指令碼(主要講管道操作的支援)

這裡提供的只是一個支援管道的命令執行介面, 至於獲取命令, 擴充套件自己的命令, 就不再贅述.

對於系統的命令, 可以直接呼叫這個介面方法, 多個命令支援管道操作.  發生錯誤時, 引發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中那幾個小小的管道??