將Python程式的輸出重定向到/dev/null

將Python程式的輸出重定向到/dev/null

我有一個由其他人編寫和編譯的 Python 可執行文件,我只需要在我自己的 bash 腳本中運行一次。該程式使用基於文字的 UI,因此在繼續之前會等待輸入,但啟動時執行的關鍵操作在我的 bash 腳本中是必需的。我知道這是一個混亂(而且奇怪)的過程,但不幸的是我沒有其他選擇。

我已經用終止訊號強行關閉程序,但程式的 TUI 堅持輸出到它運行的任何地方。我嘗試將 stdout 和 stderr 重定向到 /dev/null 並通過添加 & 符號後綴在後台運行程序,但根本無法讓它發揮作用。我相信原因是程式產生了其他進程,而父進程的輸出重定向不會影響它們。我是否可以利用任何技巧來重定向子程序的所有輸出?

答案1

該程式可能正在寫入 tty 而不是 stdout。您也許可以使用unbuffer 附帶的腳本expect或使用其他一些技術expect或類似的東西。

這是一個演示。建立此腳本並將其命名為“writetty”。然後做chmod u+x writetty

#!/bin/bash
date > /dev/tty

現在試試看:

$ ./writetty
Tue Jun  8 12:24:36 CDT 2010
$ ./writetty > /dev/null
Tue Jun  8 12:24:46 CDT 2010
$ var=$(./writetty)
Tue Jun  8 12:24:56 CDT 2010
$ unbuffer ./writetty > /tmp/writetty.out
$ cat /tmp/writetty.out
Tue Jun  8 12:25:06 CDT 2010
$ var=$(unbuffer ./writetty)
$ echo $var
Tue Jun  8 12:25:16 CDT 2010

您可以用來expect回應程式的輸入請求,而不是終止它。

相關內容