2015-01-27 10 views
8

Nếu tôi thực hiện một chức năng tại Python hoặc ipython dấu nhắc lệnh, chẳng hạn như 'giúp đỡ (dir):Chuyển sản lượng python/ipython lệnh nhắc tương tác các tập tin hoặc các biến

>>> 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. 

Tôi muốn nắm bắt kết quả đầu ra trong một tệp hoặc biến, nhưng

>>> x = help(dir)   
>>> help(dir) >file.txt 
>>> help(dir) >>file.txt 

không hoạt động. Tôi thấy một câu hỏi liên quan (Redirect an output command to a variable or file?) mặc dù nó là hết sức phức tạp, khó có thể nhớ một cách nhanh chóng, và nó rõ ràng cho dù nó thậm chí còn áp dụng ở đây.

Trong vỏ bash, sản lượng có thể được chuyển hướng với> hoặc 2>. Có vẻ như nó sẽ dễ dàng để làm một cái gì đó tương tự trong vỏ Python hoặc Ipython.

Trả lời

5

Sử dụng IPython capture_output chức năng

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. 

Cập nhật

Trong trường hợp trên giải pháp không làm việc, bạn có thể sử dụng tính năng chụp ipython đầu ra lệnh. Ví dụ:

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', 
+0

Cảm ơn bạn , Dmitry - nhưng tôi nhận được kết quả khác nhau khi tôi gõ chính xác như trên. Sau –

+0

Tôi tin rằng nhận xét của bạn bị cắt. Ý của bạn là bạn có được kết quả khác nhau? Btw, tôi đã sử dụng shell ipython. –

+0

Cảm ơn bạn, Dmitry - nhưng tôi nhận được kết quả khác nhau khi tôi gõ chính xác như trên. Tôi nhập 'từ IPython.utils nhập io'. Rồi sau 'Trong [22] ', đầu ra của' giúp đỡ (dir) 'là ** hiển thị **, và sau khi' Trong [23]', _nothing_ được hiển thị. –

11

Thậm chí tốt hơn so với các phương pháp trên, (cả hai đều sẽ làm việc), như dễ dàng hơn để nhớ và không có hàng nhập khẩu cần thiết, là ipython diệu %% chụp:

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. 
+1

Đây là giải pháp dễ nhất cho tôi. Một khi bạn đã xong với kịch bản của bạn, chỉ cần làm một đơn giản 'với mở ('filename.txt', 'a +') như outfile: outfile.write (myout)' và bạn đã hoàn tất. – Blairg23

Các vấn đề liên quan