Перенаправление вывода интерактивных команд Python / ipython в файлы или переменные
Если я выполняю функцию в командной строке Python или Ipython, например " help (dir)":
>>> help(dir)
Help on built-in function dir in module __builtin__:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Я хотел бы записать полученный результат в файл или переменную, но
>>> x = help(dir)
>>> help(dir) >file.txt
>>> help(dir) >>file.txt
не работают. Я вижу связанный с этим вопрос (перенаправить вывод команды в переменную или файл?) хотя это ужасно сложно, было бы трудно вспомнить на лету, и неясно, применяется ли это здесь.
в оболочке bash, выход может быть перенаправлено с помощью > или 2>. Кажется, что должно быть легко сделать что-то подобное в оболочке Python или Ipython.
2 ответов
Использовать IPython capture_output
функции
In [21]: from IPython.utils import io
In [22]: with io.capture_output() as captured:
....: help(dir)
....:
In [23]: print captured.stdout
Help on built-in function dir in module __builtin__:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
обновление
в случае, если выше решение не работает, вы можете использовать функцию захвата вывода команды ipython. Например:
In [6]: output = !python -c 'help(dir)' | cat
In [7]: output
Out[7]:
['Help on built-in function dir in module __builtin__:',
'',
'dir(...)',
' dir([object]) -> list of strings',
даже лучше, чем методы выше, (оба из которых будут работать), насколько проще запомнить и не требуется импорт, это IPython magic %%capture:
In [38]: %%capture myout
....: help(dir)
....:
In [39]: print myout.stdout
Help on built-in function dir in module __builtin__:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used; otherwise
the default dir() logic is used and returns:
for a module object: the module's attributes.
for a class object: its attributes, and recursively the attributes
of its bases.
for any other object: its attributes, its class's attributes, and
recursively the attributes of its class's base classes.