パイプで接続された入力のすべての出力をCLIプログラムでキャプチャ

パイプで接続された入力のすべての出力をCLIプログラムでキャプチャ

私が次のことをするとき:

$ echo "print \"test\"" | python

私の考えでは:

Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more 
information.
>>> print "test"
test

変える:

test

標準出力のすべてのプロンプトをキャプチャする方法はありますか?

答え1

コメントに記載されているすべての提案を次のように組み合わせることができます。ここにある文字列混合:

$ script -c 'python -i <<< "print \"test\""'
Script started, file is typescript
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test
>>>
Script done, file is typescript

これにより、上記の内容が次のファイルに書き込まれますtypescript

$ cat typescript
Script started on Tue 21 Aug 2018 12:19:50 AM EDT
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test
>>>

Script done on Tue 21 Aug 2018 12:19:50 AM EDT

上記の方法は次のように動作します。

  • script -c'...'- runs the commands in single quotes inスクリプトand logs the output to the fileタイプスクリプト`
  • python -i <<< "...."- 対話型モードでPythonを実行し、次"...."のようにコマンドを渡します。ここにある文字列
  • "print \"test\""- コマンドで実行ここにある文字列

エスケープシーケンスを含むタイプスクリプト

typescript生成されたファイルに次のエスケープシーケンスが含まれている場合:

ESC[34mRPMsESC[39;49mESC[0m
ESC[34mRPMs_fpmESC[39;49mESC[0m
ESC[34mansibleESC[39;49mESC[0m

less -R以下を使用または表示できますless -r

$ less -R somefile
RPMs
RPMs_fpm
ansible

引用する

関連情報