Unixシリーズプログラムは出力位置を決定できますか? [コピー]

Unixシリーズプログラムは出力位置を決定できますか? [コピー]

最近まで、私の考えでは、Unix-yプログラムは、出力が標準出力であるか、ファイルにリダイレクトされるか、パイプであるかなど、出力がどこに行くのか全く知りませんでした。しかし、以下の例のように、サイトに関係のないU&Lの質問が私の関心を集めました。

% echo "hello world" > file

% grep --color=auto lo file
hello world

% grep --color=auto lo file | cat
hello world

明らかにここでは表示されませんが、最初のコマンドは期待どおりに「lo」ハイライトを表示します。ただし、2番目の呼び出しはパイプを通過し、色は表示されません。これはgrep、出力がパイプに向かうことを認識し、カラー出力を防止することを示します。あなたはそうしなかった方法?

答え1

ファイル記述子が tty を参照しているかどうかを確認できます。

確認するisatty機能

または、次のものを使用できます。fstat機能これにより、ファイルに関する多くの情報を取得できます。

答え2

はい。出力がどこに行くかを決定する方法はいくつかあります。一つのために比較のためにstackoverflowの関連質問に対する私の答えをご覧ください。

答え3

簡単に。出力がどこに行くかを決定するために、さまざまな方法を使用できます。だからPythonでは次のことができます

    /* CODE. Input will be parsed and executed */
int
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
                     PyCompilerFlags *flags)
       {
    if (filename == NULL)
        filename = "???";
    if (Py_FdIsInteractive(fp, filename)) {
        int err = PyRun_InteractiveLoopFlags(fp, filename, flags);

関連情報