3

重複の可能性:
TTY(ターミナル)を期待するLinuxプログラムへのデータのパイピング

非インタラクティブなスクリプトから色を表示したいのですが、実際にはスクリプトが色をサポートする端末であるため、lsなどのコマンドで色--color=autoが表示されることをシェルに伝える必要があります(lsにはオプション--color=alwaysがありますが、可能なすべてのコマンドをサポートしたいと思います)色もサポートします)。

私はPythonPopenを介してシェルを呼び出します。TERM環境変数を設定しようとしましたが、機能しません。

subprocess.Popen(['/bin/bash', '-c', command],
                  env={'TERM':'xterm-color'},
                  stdout=subprocess.PIPE, stderr=subprocess.PIPE)

私が端末であることをbashに伝える方法はありますか?

4

1 に答える 1

1

プログラムは通常ls --color=auto、端末が接続されているかどうかを自動的に判断します()。これは、stdout/errファイル記述子をチェックすることによって行われます。

Pythonとの間でパイプを使用する場合(上記の例で行っているように)、プログラムのstdout / errは端末ではなくパイプに接続されるため、通常はカラーコードを出力しません。

プロセスのstdout/errを、Pythonアプリに戻すのではなく、接続されているターミナルに直接リダイレクトしてみてください。それが不可能な場合(Pythonでの出力が必要なためですが、この場合、通常はカラーコードは必要ありません)、何らかの方法でPythonで疑似端末を設定する必要があります。

于 2012-09-22T17:05:13.830 に答える