特定のPythonライブラリがインストールされていることを確認するために出力をgrepしようとしていますpip list
。私がこれをしようとすると
pip list | grep -q $package
、良い結果。すると、pip list | grep -qi $package
次のエラーが出力されます。
pi@pibox:~ $ pip list | grep -i -q pyyaml
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 248, in main
return command.main(cmd_args)
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 156, in main
logger.fatal('Exception:\n%s' % format_exc())
File "/usr/lib/python2.7/dist-packages/pip/log.py", line 111, in fatal
self.log(self.FATAL, msg, *args, **kw)
File "/usr/lib/python2.7/dist-packages/pip/log.py", line 164, in log
consumer.flush()
IOError: [Errno 32] Broken pipe
これはPython側のバグのようです。大文字と小文字を無視するgremフラグがパイプを介して情報を送信するpipの機能とはどのような関係がありますか?
これはRaspberry Pi 3pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
とgrep (GNU grep) 2.20
。
答え1
この-q
フラグを使用すると、grep
データの最初の行が一致するとプログラムはすぐに停止します。
しかし、pip
おそらくまだパイプにデータを送信しようとしています。 SIGPIPEを受け取ります。これによりエラー追跡が発生します。
この-i
フラグを使用すると、プロセスは結果のgrep
書き込みを完了する前により早く(以前の一致)停止することができます。pip
-q
通常、反対側のプログラムがSIGPIPEを処理できるかどうかわからない限り、このようなパイプラインでは使用しないでください。
だからpip list | grep -i $packagename
それはうまくいくでしょう。