我有一個簡單的Python腳本(比如,simple.py),像Python腳本和標準輸出
a = 5
b = a + a
print(b)
但我想以下幾點:輸出的結果就好像這些命令是在解釋執行的,像
>>> a = 5
>>> b = a + a
>>> print(b)
10
而且我想這在標準輸出:) 這有可能以某種簡單的方式? 對於IPython也是同樣的問題。 這個問題可以幫助爲寫一個小的「如何做」的使用Python/IPython的口譯工作
我有一個簡單的Python腳本(比如,simple.py),像Python腳本和標準輸出
a = 5
b = a + a
print(b)
但我想以下幾點:輸出的結果就好像這些命令是在解釋執行的,像
>>> a = 5
>>> b = a + a
>>> print(b)
10
而且我想這在標準輸出:) 這有可能以某種簡單的方式? 對於IPython也是同樣的問題。 這個問題可以幫助爲寫一個小的「如何做」的使用Python/IPython的口譯工作
可以使用exec
語句執行的代碼行(下面是Python 2中的代碼,更改打印報表到print()
,如果你希望它是Python 3中):
import sys
def run(filename):
with open(filename) as f:
for line in f:
print ">>> ", line
exec line
if __name__ == "__main__":
try:
run(sys.argv[1])
except KeyError:
print "You should pass one filename as parameter."
我要指出,這似乎並沒有處理多行語句非常好,但(因爲它的單獨評估每行)。
這對於交互式嵌入和使用Python shell(ActiveState code recipe)應該是一個好開始。
對於IPython,您可能可以使用IPShellEmbed。
根據您使用哪些工具來創建操作方法,您可能還需要使用Sphinx,這是一個用Python生成文檔的工具。它能夠輸出多種格式,特別是HTML和PDF。它有一個非常好的doctest模塊,它允許在您的文檔中放入Python說明。編譯文檔時將運行它們,並且將顯示說明以及結果。
您是否回答了錯誤的問題? – ChristopheD
不,Sphinx非常適合製作Python文檔/ how-tos。這不是海報所要求的,但是它是製作Python文檔時的一個選項。 – Xion345
謝謝!實際上,我使用Emacs org-mode(+ org-babel)將混合Latex與可執行代碼snipplets結合使用,也許Sphinx可以通過這種方式進行合併,但沒有考慮到它。 –
我修改@Simeon的代碼。
保存下面的代碼爲theprinter.py
import sys
if __name__ == '__main__':
c = {}
for line in sys.stdin:
sys.stdout.write('>>> %s' % line)
exec(line, c)
用法:貓yourscript.py |蟒蛇theprinter.py
瑣碎的修改:輸出是雙倍間隔,添加尾隨逗號'print' – cdarke
@cdarke:我的意思是在執行過程中。例如,對於我在xrange(10):print x「中的語句不起作用,因爲它正在爲xrange(10):中的i單獨計算。 –