言います。あなたが別のスクリプトを書くことができ、filter.py
を言う:
from sys import stdin
def print_filtered(line):
if line.startswith("print this"):
print(line, end='') # The line includes its own newline character
for line in stdin:
print_filtered(line)
はもちろん、あなたがprint_filtered()
で好きなフィルタリングオプションを置くことができます。あなたはいくつかの置換えをすることさえできます。文字列の一部を削除する場合は、その前に文字列の部分を削除することをお勧めします。
今、あなたは、出力をフィルタリングしているしたい任意のプログラムは、あなたがこのように実行することができます
$ python myfile.py | python filter.py
Rishavも、カスタムオブジェクトにsys.stdout
を置き換えることができることを彼のコメントで述べました。私は実際にそのアイデア好きではないが、あなたはこのような何かをすることを行うことができます:
import sys
class FilteredPrinter(object):
def __init__(self, filtered_print, stdout):
self._filtered_print = filtered_print
self._stdout = stdout
def _write(self, string):
self._filtered_print(string, self._stdout)
def __getattr__(self, attr):
if attr == 'write':
return self._write
return getattr(self._stdout, attr)
def filtered_print(string, stdout):
if string == "\n" or string.startswith("print this"):
stdout.write(string)
sys.stdout = FilteredPrinter(filtered_print, sys.stdout)
print("print this: my text")
print("print this text")
print("Don't print this")
このソリューションでは、あなたが好きなフィルタを指定することができます。 sys.stderr
でこれを行うこともできます。あなたが古いものに戻る場合は、sys.stdout = sys.stdout._stdout
を使用してください。 print
関数は、それぞれの引数に対して1回、改行文字に対して1回、を呼び出します。
sys.stdout.write("first")
sys.stdout.write(" ")
sys.stdout.write("second")
sys.stdout.write("\n")
だから、あなたのフィルタ機能を書くときに心の中でそれを保つようにしてください:それはprint("first", "second")
はこれを行います呼び出す、です。
「スクリーン印刷」とはどういう意味ですか?あなたの説明は、シンビオント出力デバイス(多くの場合、コマンドウィンドウ)にさまざまなチャネルを通じて出力されたメッセージを参照しているようですが、用語が一致しません。あなたの半分の例は、確かめるために十分な詳細を与えておらず、質問の形式はSOの特異性基準と実際には一致しません。 – Prune
私は多分彼が 'grep -v -E"(リストの|ブラックリストに載せられた|単語)のようなものを探していると思うかもしれません " – mbarkhau