一個處理資料的 CLI command 一定會有資料輸入,而輸入來源可以是檔案,也可以是從標準輸入(Standard Input, STDIN)而來,若需要同時支援標準輸入與指定參數(檔案路徑),則需要判斷輸入來源為何。參數判斷的部分,若是使用 argparse 開發的話,則在呼叫 argparse.add_argument()
時就可以設定好參數,最後呼叫 argparse.parse_args()
時即可得知是否有參數輸入,那標準輸入要如何判斷?
I/O Redirection 與 TTY
一個標準的 Linux TTY 是可以透過指令與機器互動的(Interactive),而當我們透過 I/O Redirection 將輸出接到另一個程式的標準輸入時,則另一個程式並不是在 TTY 下執行,因為該程式不能夠透過指令進行互動。
因此,只要判斷 Python 是不是在 TTY 下執行,就可以判斷 Python 在執行時是否有標準輸入。我們可以簡單地透過 sys.stdin.isatty() 來達成這件事情。
|
|
References: