Как сгенерировать документацию из кода Python, похожего на «вывод оболочки Python» - PullRequest
2 голосов
/ 15 февраля 2012

Я хочу запустить некоторый код Python, например, example.py.
Я не хочу вводить код вручную в оболочку Python, так как он медленный:

x = 1
x
y = 2
y + x
y

И я бы хотел добиться такого результата:

>>> x = 1
>>> x
1
>>> y = 2
>>> y + x
3
>>> y
2

Похоже, что ответить просто, но очень трудно найти, как это сделать.

Поскольку возникли некоторые вопросы, это не шаблон для документа "большой код" , который предназначен для документирования / тестирования фрагментов кода / примеров !

Ответы [ 4 ]

4 голосов
/ 15 февраля 2012

Это можно сделать с помощью InteractiveConsole в модуле code, и он поддерживает мультилинии :

import code

console = code.InteractiveConsole()

more_input = False
with open('example.py') as source:
    for line in source:
        if not more_input:
            print('>>> ' + line.rstrip())
        else:
            print('... ' + line.rstrip())

        more_input = console.push(line)

Если вам интересно, как работает флаг more_input, взгляните на документ :

InteractiveConsole.push(line):

[...] Возвращаемое значение равно True , если требуется больше ввода, False , если с линией обращались каким-либо образом (это то же самое, что runsource()).

Я протестировал его на example.py, который выглядит следующим образом:

x = 1
x
y = 2
y + x

a = (
    1,
    2,
    3
    )
print(a)

, и результат был:

>>> x = 1
>>> x
1
>>> y = 2
>>> y + x
3
>>> 
>>> a = (
...     1,
...     2,
...     3
...     )
>>> print(a)
(1, 2, 3)
2 голосов
/ 15 февраля 2012

Вы можете попробовать что-то вроде этого:

f = open('example.py', 'r')

for line in f:
  print('>>> ' + line)
  try:
    print(eval(line))
  except SyntaxError:
    exec(line)
0 голосов
/ 15 февраля 2012

Я бы не знал, как это сделать. Но вам не нужно вводить его вручную - просто скопируйте и вставьте ...

0 голосов
/ 15 февраля 2012

Предполагается, что он находится в текущем каталоге:

execfile('example.py')

См. execfile () документы.

...