2012-06-18 84 views
3

我有一個簡單的Python腳本(比如,simple.py),像Python腳本和標準輸出

a = 5 
b = a + a 
print(b) 

但我想以下幾點:輸出的結果就好像這些命令是在解釋執行的,像

>>> a = 5 
>>> b = a + a 
>>> print(b) 
10 

而且我想這在標準輸出:) 這有可能以某種簡單的方式? 對於IPython也是同樣的問題。 這個問題可以幫助爲寫一個小的「如何做」的使用Python/IPython的口譯工作

回答

3

可以使用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." 

我要指出,這似乎並沒有處理多行語句非常好,但(因爲它的單獨評估每行)。

+0

瑣碎的修改:輸出是雙倍間隔,添加尾隨逗號'print' – cdarke

+0

@cdarke:我的意思是在執行過程中。例如,對於我在xrange(10):print x「中的語句不起作用,因爲它正在爲xrange(10):中的i單獨計算。 –

1

根據您使用哪些工具來創建操作方法,您可能還需要使用Sphinx,這是一個用Python生成文檔的工具。它能夠輸出多種格式,特別是HTML和PDF。它有一個非常好的doctest模塊,它允許在您的文檔中放入Python說明。編譯文檔時將運行它們,並且將顯示說明以及結果。

+0

您是否回答了錯誤的問題? – ChristopheD

+0

不,Sphinx非常適合製作Python文檔/ how-tos。這不是海報所要求的,但是它是製作Python文檔時的一個選項。 – Xion345

+0

謝謝!實際上,我使用Emacs org-mode(+ org-babel)將混合Latex與可執行代碼snipplets結合使用,也許Sphinx可以通過這種方式進行合併,但沒有考慮到它。 –

2

我修改@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

相關問題