Pipe

如何將命令的“stdin”和“stdout”重定向到輸出

  • March 15, 2021

假設我有 Python 腳本:

#!/usr/bin/env python
input('Y/n: ')
print('Next line')

按 後Y,我想要終端和我output.txt的容器:

Y/n: Y
Next line

執行以下我沒有得到Y輸出:

$ python ask.py 2>&1 | tee output.txt

如何在輸出中包含我的響應?

沿著你已經擁有的東西(用 測試python3):

tee -a output.txt | python ask.py 2>&1 | tee -a output.txt

不利的一面是,您需要在 python 腳本終止後顯式鍵入一些內容,以首次tee嘗試寫入管道,接收 aSIGPIPE並退出。您可以通過以下方式克服此限制:

tee -a output.txt | { python ask.py 2>&1; kill 0; } | tee -a output.txt

wherekill用於殺死目前程序組(即管道執行的專用程序組)中的所有程序。(但請注意,警告可能適用)。

如果您可以使用,另一種選擇script可能是:

script -q -c 'python ask.py' output.txt

在這種情況下python,將連接到一個偽終端設備,確保它的行為就像在終端上互動式執行一樣。

引用自:https://unix.stackexchange.com/questions/639326