Hướng dẫn ipython embed async - ipython nhúng không đồng bộ

IPython 7.5 documentation states:

Change to Nested Embed

The introduction of the ability to run async code had some effect on the IPython.embed() API. By default, embed will not allow you to run asynchronous code unless an event loop is specified.

However, there seem to be no description how to specify the event loop, in the documentation.

Running:

import IPython
IPython.embed()

and then

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)

Gives:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop

On the other hand, running:

import IPython
IPython.embed(using='asyncio')

and then:

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use `asyncio`

In [3]: import asyncio

In [4]: await asyncio.sleep(1)

Gives:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in __call__(self, coro)
     25         import asyncio
     26
---> 27         return asyncio.get_event_loop().run_until_complete(coro)
     28
     29     def __str__(self):

c:\python35-64\Lib\asyncio\base_events.py in run_until_complete(self, future)
    452         future.add_done_callback(_run_until_complete_cb)
    453         try:
--> 454             self.run_forever()
    455         except:
    456             if new_task and future.done() and not future.cancelled():

c:\python35-64\Lib\asyncio\base_events.py in run_forever(self)
    406         self._check_closed()
    407         if self.is_running():
--> 408             raise RuntimeError('This event loop is already running')
    409         if events._get_running_loop() is not None:
    410             raise RuntimeError(

RuntimeError: This event loop is already running
```

Tôi chỉ sử dụng cái này:

Nội dung chính ShowShow

  • Bốn lệnh hữu ích nhất
  • Hoàn thành tab
  • Khám phá các đối tượng của bạn
  • Chức năng ma thuật
  • Chạy và chỉnh sửa Or
  • Lịch sử¶
  • Các lệnh shell hệ thống
  • Xác định bí danh hệ thống của riêng bạn
  • Cấu hình¶
  • Các tập tin khởi động

from IPython import embed; embed()

Nếu bạn muốn một số mã được chạy vào đầu mỗi phiên ipython, cách dễ nhất là thêm các tập lệnh python (.py) hoặc ipython (.ipy) vào thư mục


Update:

import IPython
IPython.embed(using='asyncio')
48 của bạn. Các tệp ở đây sẽ được thực thi ngay khi shell ipython được xây dựng, trước bất kỳ mã hoặc tập lệnh nào khác mà bạn đã chỉ định. Các tệp sẽ được chạy theo thứ tự tên của chúng, vì vậy bạn có thể kiểm soát thứ tự với các tiền tố, như
import IPython
IPython.embed(using='asyncio')
49.

Tôi chỉ sử dụng cái này:

 __import__("IPython").embed()

Cho hơn tôi thường sử dụng điều này bên trong một vòng lặp hoặc một luồng, có thể hữu ích khi bao gồm một đoạn trích cho phép chấm dứt quy trình cha mẹ (một phần để thuận tiện và một phần để nhắc nhở bản thân về cách tốt nhất để làm điều đó).

q = __import__("functools").partial(__import__("os")._exit, 0)
8 là lựa chọn tốt nhất ở đây, vì vậy đoạn trích của tôi bao gồm điều này (cùng logic w/r/t bằng cách sử dụng một câu lệnh):

q = __import__("functools").partial(__import__("os")._exit, 0)

Sau đó, tôi chỉ có thể sử dụng

q = __import__("functools").partial(__import__("os")._exit, 0)
9 nếu/khi tôi muốn thoát khỏi quy trình chính.

Đoạn trích đầy đủ của tôi (với

 __import__("IPython").embed()
0 trong trường hợp tôi có thể quên loại bỏ nó!) Trông như thế này:
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
0

Bạn không cần phải biết bất cứ điều gì ngoài Python để bắt đầu sử dụng ipython - chỉ cần gõ các lệnh như bạn làm tại dấu nhắc Python tiêu chuẩn. Nhưng Ipython có thể làm nhiều hơn lời nhắc tiêu chuẩn. Một số tính năng chính được mô tả ở đây. Để biết thêm thông tin, hãy kiểm tra trang Mẹo hoặc xem các ví dụ trong Sách nấu ăn Ipython.tips page, or look at examples in the IPython cookbook.tips page, or look at examples in the IPython cookbook.

Nếu bạn đã thực hiện điều đó nhưng hãy xem cách cài đặt Ipython.how to install ipython.how to install ipython.

Nếu bạn không bao giờ sử dụng Python trước đây, bạn có thể muốn xem hướng dẫn chính thức hoặc một giải pháp thay thế, đi sâu vào Python.

Bắt đầu ipython bằng cách phát hành lệnh

 __import__("IPython").embed()
1 từ vỏ của bạn, bạn nên được chào đón bằng cách sau:
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
2

Không giống như Python REP, bạn sẽ thấy rằng dấu nhắc đầu vào là

 __import__("IPython").embed()
2 thay vì
 __import__("IPython").embed()
3. Số
 __import__("IPython").embed()
4 trong lời nhắc sẽ được sử dụng sau này trong hướng dẫn này nhưng thường không ảnh hưởng đến tính toán.

Bạn sẽ có thể nhập các biểu thức dòng đơn và nhấn Enter để đánh giá chúng. Nếu một biểu thức không đầy đủ, ipython sẽ tự động phát hiện điều này và thêm một dòng mới khi bạn nhấn enter thay vì thực thi ngay lập tức.

Hãy thoải mái khám phá đầu vào văn bản nhiều dòng. Không giống như nhiều bản sao khác, với ipython, bạn có thể sử dụng các khóa mũi tên lên và xuống khi chỉnh sửa các khối mã đa dòng.

Dưới đây là một ví dụ về sự tương tác dài hơn với ipython replin, mà chúng ta thường gọi là phiên ipython

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
6

Chúng tôi đã giành được chi tiết ngay bây giờ, nhưng bạn có thể nhận thấy một vài sự khác biệt đối với Python Repress tiêu chuẩn. Đầu tiên, mã của bạn phải được đánh sáng bằng cú pháp khi bạn gõ. Thứ hai, bạn sẽ thấy rằng một số kết quả sẽ có dấu nhắc

 __import__("IPython").embed()
5, trong khi một số khác thì không. Chúng tôi sẽ đến với điều này sau.

Tùy thuộc vào lệnh chính xác mà bạn đang nhập, bạn có thể nhận ra rằng đôi khi Enter sẽ thêm một dòng mới và đôi khi nó sẽ thực thi câu lệnh hiện tại. Ipython cố gắng đoán xem bạn đang làm gì, vì vậy hầu hết thời gian bạn không nên quan tâm. Mặc dù nếu có bất kỳ cơ hội nào Ipython không làm đúng, bạn có thể buộc thực thi khối mã hiện tại bằng cách nhấn theo trình tự ESC và ENTER. Bạn cũng có thể buộc chèn một dòng mới ở vị trí của con trỏ bằng cách sử dụng Ctrl-O.

Bốn lệnh hữu ích nhất

Bốn lệnh hữu ích nhất, cũng như mô tả ngắn gọn của chúng, được hiển thị cho bạn trong một biểu ngữ, mỗi khi bạn bắt đầu ipython:

yêu cầu

sự mô tả

?

Giới thiệu và tổng quan về các tính năng của Ipython.

%quickref

Tham khảo nhanh.

Cứu giúp

Hệ thống trợ giúp riêng của Python.

object?

Chi tiết về ‘đối tượng, sử dụng‘ đối tượng ?? để biết thêm chi tiết.

Hoàn thành tab

Hoàn thành tab, đặc biệt là đối với các thuộc tính, là một cách thuận tiện để khám phá cấu trúc của bất kỳ đối tượng nào mà bạn đang xử lý. Chỉ cần nhập

 __import__("IPython").embed()
6 để xem các thuộc tính của đối tượng. Bên cạnh các đối tượng Python và từ khóa, Tab hoàn thành cũng hoạt động trên tên tệp và thư mục.

Bắt đầu với Ipython 6.0, nếu

 __import__("IPython").embed()
7 được cài đặt, Ipython cũng sẽ cố gắng hoàn thành từ Jedi. Điều này cho phép không chỉ kiểm tra các đối tượng hiện có, mà còn suy ra hoàn thành tĩnh mà không cần thực thi mã. Không có gì cần thiết để làm cho nó hoạt động, chỉ cần sử dụng hoàn thành tab trên các biểu thức phức tạp hơn như sau:
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
0

Ipython và Jedi sẽ có thể suy luận rằng

 __import__("IPython").embed()
8 thực sự là một chuỗi và sẽ hiển thị các kết thúc có liên quan như
 __import__("IPython").embed()
9,
q = __import__("functools").partial(__import__("os")._exit, 0)
0 và các phương thức chuỗi khác. Bạn có thể sử dụng phím tab để chu kỳ thông qua các lần hoàn thành và trong khi hoàn thành được tô sáng, loại của nó cũng sẽ được hiển thị. Khi loại hoàn thành là một hàm, trình tuân thủ cũng sẽ hiển thị chữ ký của hàm khi được tô sáng.

Khám phá các đối tượng của bạn

q = __import__("functools").partial(__import__("os")._exit, 0)
1 sẽ in tất cả các loại chi tiết về bất kỳ đối tượng nào, bao gồm DocStrings, các dòng định nghĩa chức năng (cho các đối số cuộc gọi) và chi tiết hàm tạo cho các lớp. Để có được thông tin cụ thể về một đối tượng, bạn có thể sử dụng các lệnh ma thuật
q = __import__("functools").partial(__import__("os")._exit, 0)
2,
q = __import__("functools").partial(__import__("os")._exit, 0)
3,
q = __import__("functools").partial(__import__("os")._exit, 0)
4 và
q = __import__("functools").partial(__import__("os")._exit, 0)
5

Chức năng ma thuật

Ipython có một tập hợp các chức năng ma thuật được xác định trước mà bạn có thể gọi với cú pháp kiểu dòng lệnh. Có hai loại phép thuật, định hướng dòng và định hướng tế bào. Các phép thuật dòng được đặt trước với ký tự

q = __import__("functools").partial(__import__("os")._exit, 0)
6 và hoạt động giống như các cuộc gọi dòng lệnh hệ điều hành: chúng nhận được một đối số phần còn lại của dòng, trong đó các đối số được truyền mà không có dấu ngoặc đơn hoặc trích dẫn. MAGICS có thể trả về kết quả và có thể được sử dụng ở phía bên phải của một nhiệm vụ. Các phép thuật của tế bào được có tiền tố với một kép
q = __import__("functools").partial(__import__("os")._exit, 0)
7 và chúng là các chức năng nhận được như một đối số không chỉ phần còn lại của dòng, mà cả các dòng bên dưới nó trong một đối số riêng biệt.Line magics are prefixed with the
q = __import__("functools").partial(__import__("os")._exit, 0)
6 character and work much like OS command-line calls: they get as an argument the rest of the line, where arguments are passed without parentheses or quotes. Lines magics can return results and can be used in the right hand side of an assignment. Cell magics are prefixed with a double
q = __import__("functools").partial(__import__("os")._exit, 0)
7, and they are functions that get as an argument not only the rest of the line, but also the lines below it in a separate argument.Line magics are prefixed with the
q = __import__("functools").partial(__import__("os")._exit, 0)
6 character and work much like OS command-line calls: they get as an argument the rest of the line, where arguments are passed without parentheses or quotes. Lines magics can return results and can be used in the right hand side of an assignment. Cell magics are prefixed with a double
q = __import__("functools").partial(__import__("os")._exit, 0)
7, and they are functions that get as an argument not only the rest of the line, but also the lines below it in a separate argument.

Pháp thuật rất hữu ích vì các chức năng thuận tiện trong đó cú pháp Python không phải là tự nhiên nhất, hoặc khi một người muốn nhúng cú pháp Python không hợp lệ trong dòng công việc của chúng.

Các ví dụ sau đây cho thấy cách gọi ma thuật

q = __import__("functools").partial(__import__("os")._exit, 0)
8 tích hợp, cả trong chế độ dòng và ô:
import IPython
IPython.embed(using='asyncio')
4

Các phép thuật tích hợp bao gồm:

  • Các chức năng hoạt động với mã:

    q = __import__("functools").partial(__import__("os")._exit, 0)
    
    9,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    00,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    01,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    02,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    03, v.v.
  • Các chức năng ảnh hưởng đến vỏ:

    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    04,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    05,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    06, v.v.
  • Các chức năng khác như

    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    07,
    q = __import__("functools").partial(__import__("os")._exit, 0)
    
    8,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    09,
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    20 hoặc
    In [1]: %autoawait on
    
    In [2]: %autoawait
    IPython autoawait is `on`, and set to use ``
    
    In [3]: import asyncio
    
    In [4]: await asyncio.sleep(1)
    
    21.

Bạn luôn có thể gọi ma thuật bằng tiền tố

q = __import__("functools").partial(__import__("os")._exit, 0)
6 và nếu bạn tự gọi một phép thuật trên một dòng, miễn là định danh không được xác định trong không gian tên của bạn, bạn có thể bỏ qua điều đó thậm chí:

Bạn có thể chuyển đổi hành vi này bằng cách chạy ma thuật

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
06. Magics di động phải luôn có tiền tố
q = __import__("functools").partial(__import__("os")._exit, 0)
7.

Một lời giải thích chi tiết hơn về hệ thống ma thuật có thể được lấy bằng cách gọi

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
25 và để biết thêm chi tiết về bất kỳ chức năng ma thuật nào, hãy gọi
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
26 để đọc tài liệu của nó. Để xem tất cả các chức năng ma thuật có sẵn, hãy gọi
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
27.

Chạy và chỉnh sửa Or

Lệnh ma thuật

q = __import__("functools").partial(__import__("os")._exit, 0)
9 cho phép bạn chạy bất kỳ tập lệnh Python nào và tải tất cả dữ liệu của nó trực tiếp vào không gian tên tương tác. Vì tệp được đọc lại từ đĩa mỗi lần, các thay đổi bạn thực hiện với nó được phản ánh ngay lập tức (không giống như các mô-đun được nhập, phải được tải lại cụ thể). Ipython cũng bao gồm dreload, chức năng tải lại đệ quy.dreload, a recursive reload function.
q = __import__("functools").partial(__import__("os")._exit, 0)
9 có các cờ đặc biệt để định thời gian thực hiện các tập lệnh của bạn (-T) hoặc để chạy chúng dưới sự kiểm soát của trình gỡ lỗi Python tựa PDB (-D) hoặc Profiler (-p).dreload, a recursive reload function.
q = __import__("functools").partial(__import__("os")._exit, 0)
9 có các cờ đặc biệt để định thời gian thực hiện các tập lệnh của bạn (-T) hoặc để chạy chúng dưới sự kiểm soát của trình gỡ lỗi Python tựa PDB (-D) hoặc Profiler (-p).

Lệnh

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
00 cung cấp một xấp xỉ hợp lý của chỉnh sửa nhiều dòng, bằng cách gọi trình chỉnh sửa yêu thích của bạn tại chỗ. Ipython sẽ thực thi mã bạn nhập vào đó như thể nó được gõ một cách tương tác. Lưu ý rằng để
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
00 hoạt động, cuộc gọi khởi động biên tập viên của bạn phải là một cuộc gọi chặn. Trong môi trường GUI, biên tập viên của bạn có thể sẽ có một tùy chọn như vậy.

Gỡ lỗi

Sau khi xảy ra ngoại lệ, bạn có thể gọi

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
62 để nhảy vào trình gỡ lỗi Python (PDB) và kiểm tra vấn đề. Ngoài ra, nếu bạn gọi
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
63, ipython sẽ tự động khởi động trình gỡ lỗi trên bất kỳ ngoại lệ chưa được thực hiện nào. Bạn có thể in các biến, xem mã, thực thi các câu lệnh và thậm chí đi lên và xuống ngăn xếp cuộc gọi để theo dõi nguồn thực sự của vấn đề. Đây có thể là một cách hiệu quả để phát triển và gỡ lỗi mã, trong nhiều trường hợp loại bỏ sự cần thiết của các câu lệnh in hoặc các công cụ gỡ lỗi bên ngoài.

Bạn cũng có thể bước qua một chương trình ngay từ đầu bằng cách gọi

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
64.

Lịch sử¶

Ipython lưu trữ cả hai lệnh bạn nhập và kết quả mà nó tạo ra. Bạn có thể dễ dàng vượt qua các lệnh trước đó với các phím tăng và xuống hoặc truy cập vào lịch sử của bạn theo những cách tinh vi hơn.

Lịch sử đầu vào và đầu ra được giữ trong các biến được gọi là

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
65 và
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
66, được khóa bởi các số nhắc nhở, ví dụ:
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
67. Ba đối tượng cuối cùng trong lịch sử đầu ra cũng được giữ trong các biến có tên
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
68,
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
69 và
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
00.

Bạn có thể sử dụng chức năng ma thuật

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
01 để kiểm tra đầu vào và đầu ra trong quá khứ. Lịch sử đầu vào từ các phiên trước được lưu trong cơ sở dữ liệu và Ipython có thể được cấu hình để lưu lịch sử đầu ra.

Một số hàm ma thuật khác có thể sử dụng lịch sử đầu vào của bạn, bao gồm

In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
00,
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
03,
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
03,
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
02,
In [1]: %autoawait on

In [2]: %autoawait
IPython autoawait is `on`, and set to use ``

In [3]: import asyncio

In [4]: await asyncio.sleep(1)
01 và
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
07. Bạn có thể sử dụng một định dạng tiêu chuẩn để tham khảo các dòng:

Điều này sẽ lấy dòng 3 và dòng 18 đến 20 từ phiên hiện tại và các dòng 1-5 từ phiên trước.

Các lệnh shell hệ thống

Để chạy bất kỳ lệnh nào tại shell hệ thống, chỉ cần tiền tố nó với

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
08, ví dụ:

Bạn có thể thu được đầu ra vào danh sách Python, ví dụ:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~\Envs\[redacted]\lib\site-packages\IPython\core\async_helpers.py in _pseudo_sync_runner(coro)
     71         # TODO: do not raise but return an execution result with the right info.
     72         raise RuntimeError(
---> 73             "{coro_name!r} needs a real async loop".format(coro_name=coro.__name__)
     74         )
     75

RuntimeError: 'run_cell_async' needs a real async loop
09. Để truyền các giá trị của các biến hoặc biểu thức Python cho các lệnh hệ thống, hãy đặt tiền tố chúng với $:
import IPython
IPython.embed(using='asyncio')
40 hoặc bọc trong
import IPython
IPython.embed(using='asyncio')
41. Xem phần vỏ của chúng tôi để biết thêm chi tiết.our shell section for more details.our shell section for more details.

Xác định bí danh hệ thống của riêng bạn

Nó thuận tiện để có bí danh cho các lệnh hệ thống bạn sử dụng thường xuyên nhất. Điều này cho phép bạn làm việc liền mạch từ bên trong ipython với các lệnh tương tự bạn đã quen với vỏ hệ thống của mình. Ipython đi kèm với một số bí danh được xác định trước và một hệ thống hoàn chỉnh để thay đổi các thư mục, cả thông qua một ngăn xếp (xem

import IPython
IPython.embed(using='asyncio')
42,
import IPython
IPython.embed(using='asyncio')
43 và
import IPython
IPython.embed(using='asyncio')
44) và thông qua trực tiếp
import IPython
IPython.embed(using='asyncio')
45. Sau này giữ một lịch sử của các thư mục đã truy cập và cho phép bạn đi đến bất kỳ ai đã ghé thăm trước đó.

Cấu hình¶

Phần lớn Ipython có thể được điều chỉnh thông qua cấu hình. Để bắt đầu, hãy sử dụng lệnh

import IPython
IPython.embed(using='asyncio')
46 để tạo các tệp cấu hình mặc định. Chúng sẽ được đặt trong
import IPython
IPython.embed(using='asyncio')
47 và chứa các bình luận giải thích những tùy chọn khác nhau làm gì.configuration. To get started, use the command
import IPython
IPython.embed(using='asyncio')
46 to produce the default config files. These will be placed in
import IPython
IPython.embed(using='asyncio')
47, and contain comments explaining what the various options do.configuration. To get started, use the command
import IPython
IPython.embed(using='asyncio')
46 to produce the default config files. These will be placed in
import IPython
IPython.embed(using='asyncio')
47, and contain comments explaining what the various options do.

Hồ sơ cho phép bạn sử dụng ipython cho các tác vụ khác nhau, giữ các tệp cấu hình và lịch sử riêng biệt cho từng tác phẩm. Thêm chi tiết trong phần Hồ sơ.the profiles section.the profiles section.

Các tập tin khởi động

Nếu bạn muốn một số mã được chạy vào đầu mỗi phiên ipython, cách dễ nhất là thêm các tập lệnh python (.py) hoặc ipython (.ipy) vào thư mục

import IPython
IPython.embed(using='asyncio')
48 của bạn. Các tệp ở đây sẽ được thực thi ngay khi shell ipython được xây dựng, trước bất kỳ mã hoặc tập lệnh nào khác mà bạn đã chỉ định. Các tệp sẽ được chạy theo thứ tự tên của chúng, vì vậy bạn có thể kiểm soát thứ tự với các tiền tố, như
import IPython
IPython.embed(using='asyncio')
49.