-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathasyncio-subprocess.po
473 lines (402 loc) · 19.8 KB
/
asyncio-subprocess.po
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2021, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Zombie110year <zombie110year@gmail.com>, 2019
# Pan Felix <tinylambda@gmail.com>, 2019
# walkinrain <walkinrain2008@outlook.com>, 2019
# nick <2330458484@qq.com>, 2019
# ppcfish <ppcfish@gmail.com>, 2019
# MuSheng Chen <sheng.2179@gmail.com>, 2019
# Freesand Leo <yuqinju@163.com>, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Python 3.7\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-01 16:02+0000\n"
"PO-Revision-Date: 2019-09-01 03:16+0000\n"
"Last-Translator: Freesand Leo <yuqinju@163.com>, 2020\n"
"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../../library/asyncio-subprocess.rst:7
msgid "Subprocesses"
msgstr "子进程集"
#: ../../library/asyncio-subprocess.rst:9
msgid ""
"This section describes high-level async/await asyncio APIs to create and "
"manage subprocesses."
msgstr "本节介绍了用于创建和管理子进程的高层级 async/await asyncio API。"
#: ../../library/asyncio-subprocess.rst:14
msgid ""
"Here's an example of how asyncio can run a shell command and obtain its "
"result::"
msgstr "下面的例子演示了如何用 asyncio 运行一个 shell 命令并获取其结果::"
#: ../../library/asyncio-subprocess.rst:35
msgid "will print::"
msgstr "将打印::"
#: ../../library/asyncio-subprocess.rst:41
msgid ""
"Because all asyncio subprocess functions are asynchronous and asyncio "
"provides many tools to work with such functions, it is easy to execute and "
"monitor multiple subprocesses in parallel. It is indeed trivial to modify "
"the above example to run several commands simultaneously::"
msgstr ""
"由于所有 asyncio 子进程函数都是异步的并且 asyncio 提供了许多工具用来配合这些函数使用,因此并行地执行和监视多个子进程十分容易。 "
"要修改上面的例子来同时运行多个命令确实是非常简单的::"
#: ../../library/asyncio-subprocess.rst:53
msgid "See also the `Examples`_ subsection."
msgstr "另请参阅 `Examples`_ 小节。"
#: ../../library/asyncio-subprocess.rst:57
msgid "Creating Subprocesses"
msgstr "创建子进程"
#: ../../library/asyncio-subprocess.rst:63
msgid "Create a subprocess."
msgstr "创建一个子进程。"
#: ../../library/asyncio-subprocess.rst:65
#: ../../library/asyncio-subprocess.rst:80
msgid ""
"The *limit* argument sets the buffer limit for :class:`StreamReader` "
"wrappers for :attr:`Process.stdout` and :attr:`Process.stderr` (if "
":attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments)."
msgstr ""
"*limit* 参数为 :attr:`Process.stdout` 和 :attr:`Process.stderr` 设置 "
":class:`StreamReader` 包装器的缓冲区上限(如果将 :attr:`subprocess.PIPE` 传给了 *stdout* 和 "
"*stderr* 参数)。"
#: ../../library/asyncio-subprocess.rst:69
#: ../../library/asyncio-subprocess.rst:84
msgid "Return a :class:`~asyncio.subprocess.Process` instance."
msgstr "返回一个 :class:`~asyncio.subprocess.Process` 实例。"
#: ../../library/asyncio-subprocess.rst:71
msgid ""
"See the documentation of :meth:`loop.subprocess_exec` for other parameters."
msgstr "有关其他形参的说明请查阅 :meth:`loop.subprocess_exec` 的文档。"
#: ../../library/asyncio-subprocess.rst:78
msgid "Run the *cmd* shell command."
msgstr "运行 *cmd* shell 命令。"
#: ../../library/asyncio-subprocess.rst:86
msgid ""
"See the documentation of :meth:`loop.subprocess_shell` for other parameters."
msgstr "有关其他形参的说明请查阅 :meth:`loop.subprocess_shell` 的文档。"
#: ../../library/asyncio-subprocess.rst:91
msgid ""
"It is the application's responsibility to ensure that all whitespace and "
"special characters are quoted appropriately to avoid `shell injection "
"<https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_ "
"vulnerabilities. The :func:`shlex.quote` function can be used to properly "
"escape whitespace and special shell characters in strings that are going to "
"be used to construct shell commands."
msgstr ""
"应用程序要负责确保正确地转义所有空白字符和特殊字符以防止 `shell 注入 "
"<https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_ 漏洞。 "
":func:`shlex.quote` 函数可以被用来正确地转义字符串中可以被用来构造 shell 命令的空白字符和特殊 shell 字符。"
#: ../../library/asyncio-subprocess.rst:100
msgid ""
"The default asyncio event loop implementation on **Windows** does not "
"support subprocesses. Subprocesses are available for Windows if a "
":class:`ProactorEventLoop` is used. See :ref:`Subprocess Support on Windows "
"<asyncio-windows-subprocess>` for details."
msgstr ""
#: ../../library/asyncio-subprocess.rst:108
msgid ""
"asyncio also has the following *low-level* APIs to work with subprocesses: "
":meth:`loop.subprocess_exec`, :meth:`loop.subprocess_shell`, "
":meth:`loop.connect_read_pipe`, :meth:`loop.connect_write_pipe`, as well as "
"the :ref:`Subprocess Transports <asyncio-subprocess-transports>` and "
":ref:`Subprocess Protocols <asyncio-subprocess-protocols>`."
msgstr ""
"asyncio 还有下列 *低层级* API 可配合子进程使用: :meth:`loop.subprocess_exec`, "
":meth:`loop.subprocess_shell`, :meth:`loop.connect_read_pipe`, "
":meth:`loop.connect_write_pipe` 以及 :ref:`子进程传输 <asyncio-subprocess-"
"transports>` 和 :ref:`子进程协议 <asyncio-subprocess-protocols>`。"
#: ../../library/asyncio-subprocess.rst:116
msgid "Constants"
msgstr "常量"
#: ../../library/asyncio-subprocess.rst:120
msgid "Can be passed to the *stdin*, *stdout* or *stderr* parameters."
msgstr "可以被传递给 *stdin*, *stdout* 或 *stderr* 形参。"
#: ../../library/asyncio-subprocess.rst:122
msgid ""
"If *PIPE* is passed to *stdin* argument, the :attr:`Process.stdin "
"<asyncio.subprocess.Process.stdin>` attribute will point to a "
":class:`StreamWriter` instance."
msgstr ""
"如果 *PIPE* 被传递给 *stdin* 参数,则 :attr:`Process.stdin "
"<asyncio.subprocess.Process.stdin>` 属性将会指向一个 :class:`StreamWriter` 实例。"
#: ../../library/asyncio-subprocess.rst:126
msgid ""
"If *PIPE* is passed to *stdout* or *stderr* arguments, the "
":attr:`Process.stdout <asyncio.subprocess.Process.stdout>` and "
":attr:`Process.stderr <asyncio.subprocess.Process.stderr>` attributes will "
"point to :class:`StreamReader` instances."
msgstr ""
"如果 *PIPE* 被传递给 *stdout* 或 *stderr* 参数,则 :attr:`Process.stdout "
"<asyncio.subprocess.Process.stdout>` 和 :attr:`Process.stderr "
"<asyncio.subprocess.Process.stderr>` 属性将会指向 :class:`StreamReader` 实例。"
#: ../../library/asyncio-subprocess.rst:133
msgid ""
"Special value that can be used as the *stderr* argument and indicates that "
"standard error should be redirected into standard output."
msgstr "可以用作 *stderr* 参数的特殊值,表示标准错误应当被重定向到标准输出。"
#: ../../library/asyncio-subprocess.rst:138
msgid ""
"Special value that can be used as the *stdin*, *stdout* or *stderr* argument"
" to process creation functions. It indicates that the special file "
":data:`os.devnull` will be used for the corresponding subprocess stream."
msgstr ""
"可以用作 *stdin*, *stdout* 或 *stderr* 参数来处理创建函数的特殊值。 它表示将为相应的子进程流使用特殊文件 "
":data:`os.devnull`。"
#: ../../library/asyncio-subprocess.rst:144
msgid "Interacting with Subprocesses"
msgstr "与子进程交互"
#: ../../library/asyncio-subprocess.rst:146
msgid ""
"Both :func:`create_subprocess_exec` and :func:`create_subprocess_shell` "
"functions return instances of the *Process* class. *Process* is a high-"
"level wrapper that allows communicating with subprocesses and watching for "
"their completion."
msgstr ""
":func:`create_subprocess_exec` 和 :func:`create_subprocess_shell` 函数都返回 "
"*Process* 类的实例。 *Process* 是一个高层级包装器,它允许与子进程通信并监视其完成情况。"
#: ../../library/asyncio-subprocess.rst:153
msgid ""
"An object that wraps OS processes created by the "
":func:`create_subprocess_exec` and :func:`create_subprocess_shell` "
"functions."
msgstr ""
"一个用于包装 :func:`create_subprocess_exec` and :func:`create_subprocess_shell` "
"函数创建的 OS 进程的对象。"
#: ../../library/asyncio-subprocess.rst:157
msgid ""
"This class is designed to have a similar API to the "
":class:`subprocess.Popen` class, but there are some notable differences:"
msgstr "这个类被设计为具有与 :class:`subprocess.Popen` 类相似的 API,但两者有一些重要的差异:"
#: ../../library/asyncio-subprocess.rst:161
msgid ""
"unlike Popen, Process instances do not have an equivalent to the "
":meth:`~subprocess.Popen.poll` method;"
msgstr "不同于 Popen,Process 实例没有与 :meth:`~subprocess.Popen.poll` 方法等价的方法;"
#: ../../library/asyncio-subprocess.rst:164
msgid ""
"the :meth:`~asyncio.subprocess.Process.communicate` and "
":meth:`~asyncio.subprocess.Process.wait` methods don't have a *timeout* "
"parameter: use the :func:`wait_for` function;"
msgstr ""
":meth:`~asyncio.subprocess.Process.communicate` 和 "
":meth:`~asyncio.subprocess.Process.wait` 方法没有 *timeout* 形参;要使用 "
":func:`wait_for` 函数;"
#: ../../library/asyncio-subprocess.rst:168
msgid ""
"the :meth:`Process.wait() <asyncio.subprocess.Process.wait>` method is "
"asynchronous, whereas :meth:`subprocess.Popen.wait` method is implemented as"
" a blocking busy loop;"
msgstr ""
":meth:`Process.wait() <asyncio.subprocess.Process.wait>` 方法是异步的,而 "
":meth:`subprocess.Popen.wait` 方法则被实现为阻塞型忙循环;"
#: ../../library/asyncio-subprocess.rst:172
msgid "the *universal_newlines* parameter is not supported."
msgstr "*universal_newlines* 形参不被支持。"
#: ../../library/asyncio-subprocess.rst:174
msgid "This class is :ref:`not thread safe <asyncio-multithreading>`."
msgstr "这个类不是线程安全的(:ref:`not thread safe <asyncio-multithreading>`)。"
#: ../../library/asyncio-subprocess.rst:176
msgid ""
"See also the :ref:`Subprocess and Threads <asyncio-subprocess-threads>` "
"section."
msgstr "请参阅 :ref:`子进程和线程 <asyncio-subprocess-threads>` 部分。"
#: ../../library/asyncio-subprocess.rst:181
msgid "Wait for the child process to terminate."
msgstr "等待子进程终结。"
#: ../../library/asyncio-subprocess.rst:183
msgid "Set and return the :attr:`returncode` attribute."
msgstr "设置并返回 :attr:`returncode` 属性。"
#: ../../library/asyncio-subprocess.rst:187
msgid ""
"This method can deadlock when using ``stdout=PIPE`` or ``stderr=PIPE`` and "
"the child process generates so much output that it blocks waiting for the OS"
" pipe buffer to accept more data. Use the :meth:`communicate` method when "
"using pipes to avoid this condition."
msgstr ""
"当使用 ``stdout=PIPE`` 或 ``stderr=PIPE`` 并且子进程产生了足以阻塞 OS "
"管道缓冲区等待接收更多的数据的输出时,此方法会发生死锁。 当使用管道时请使用 :meth:`communicate` 方法来避免这种情况。"
#: ../../library/asyncio-subprocess.rst:195
msgid "Interact with process:"
msgstr "与进程交互:"
#: ../../library/asyncio-subprocess.rst:197
msgid "send data to *stdin* (if *input* is not ``None``);"
msgstr "发送数据到 *stdin* (如果 *input* 不为 ``None``);"
#: ../../library/asyncio-subprocess.rst:198
msgid "read data from *stdout* and *stderr*, until EOF is reached;"
msgstr "从 *stdout* 和 *stderr* 读取数据,直至到达 EOF;"
#: ../../library/asyncio-subprocess.rst:199
msgid "wait for process to terminate."
msgstr "等待进程终结。"
#: ../../library/asyncio-subprocess.rst:201
msgid ""
"The optional *input* argument is the data (:class:`bytes` object) that will "
"be sent to the child process."
msgstr "可选的 *input* 参数为将被发送到子进程的数据 (:class:`bytes` 对象)。"
#: ../../library/asyncio-subprocess.rst:204
msgid "Return a tuple ``(stdout_data, stderr_data)``."
msgstr "返回一个元组 ``(stdout_data, stderr_data)``。"
#: ../../library/asyncio-subprocess.rst:206
msgid ""
"If either :exc:`BrokenPipeError` or :exc:`ConnectionResetError` exception is"
" raised when writing *input* into *stdin*, the exception is ignored. This "
"condition occurs when the process exits before all data are written into "
"*stdin*."
msgstr ""
"如果在将 *input* 写入到 *stdin* 时引发了 :exc:`BrokenPipeError` 或 "
":exc:`ConnectionResetError` 异常,异常会被忽略。 此条件会在进程先于所有数据被写入到 *stdin* 之前退出时发生。"
#: ../../library/asyncio-subprocess.rst:211
msgid ""
"If it is desired to send data to the process' *stdin*, the process needs to "
"be created with ``stdin=PIPE``. Similarly, to get anything other than "
"``None`` in the result tuple, the process has to be created with "
"``stdout=PIPE`` and/or ``stderr=PIPE`` arguments."
msgstr ""
"如果想要将数据发送到进程的 *stdin*,则创建进程时必须使用 ``stdin=PIPE``。 类似地,要在结果元组中获得任何不为 ``None`` "
"的值,则创建进程时必须使用 ``stdout=PIPE`` 和/或 ``stderr=PIPE`` 参数。"
#: ../../library/asyncio-subprocess.rst:217
msgid ""
"Note, that the data read is buffered in memory, so do not use this method if"
" the data size is large or unlimited."
msgstr "注意,数据读取在内存中是带缓冲的,因此如果数据量过大或不受则不要使用此方法。"
#: ../../library/asyncio-subprocess.rst:222
msgid "Sends the signal *signal* to the child process."
msgstr "将信号 *signal* 发送给子进程。"
#: ../../library/asyncio-subprocess.rst:226
msgid ""
"On Windows, :py:data:`SIGTERM` is an alias for :meth:`terminate`. "
"``CTRL_C_EVENT`` and ``CTRL_BREAK_EVENT`` can be sent to processes started "
"with a *creationflags* parameter which includes "
"``CREATE_NEW_PROCESS_GROUP``."
msgstr ""
"在 Windows 上,:py:data:`SIGTERM` 是 :meth:`terminate` 的别名。 ``CTRL_C_EVENT`` 和 "
"``CTRL_BREAK_EVENT`` 可被发送给创建时附带 *creationflags* 形参且其中包括 "
"``CREATE_NEW_PROCESS_GROUP`` 的进程。"
#: ../../library/asyncio-subprocess.rst:233
msgid "Stop the child process."
msgstr "停止子进程。"
#: ../../library/asyncio-subprocess.rst:235
msgid ""
"On POSIX systems this method sends :py:data:`signal.SIGTERM` to the child "
"process."
msgstr "在 POSIX 系统中此方法会发送 :py:data:`signal.SIGTERM` 给子进程。"
#: ../../library/asyncio-subprocess.rst:238
msgid ""
"On Windows the Win32 API function :c:func:`TerminateProcess` is called to "
"stop the child process."
msgstr "在 Windows 上会调用 Win32 API 函数 :c:func:`TerminateProcess` 以停止子进程。"
#: ../../library/asyncio-subprocess.rst:243
msgid "Kill the child."
msgstr "杀掉子进程。"
#: ../../library/asyncio-subprocess.rst:245
msgid ""
"On POSIX systems this method sends :py:data:`SIGKILL` to the child process."
msgstr "在 POSIX 系统中此方法会发送 :py:data:`SIGKILL` 给子进程。"
#: ../../library/asyncio-subprocess.rst:248
msgid "On Windows this method is an alias for :meth:`terminate`."
msgstr "在 Windows 上此方法是 :meth:`terminate` 的别名。"
#: ../../library/asyncio-subprocess.rst:252
msgid ""
"Standard input stream (:class:`StreamWriter`) or ``None`` if the process was"
" created with ``stdin=None``."
msgstr "标准输入流 (:class:`StreamWriter`) 或者如果进程创建时设置了``stdin=None`` 则为 ``None``。"
#: ../../library/asyncio-subprocess.rst:257
msgid ""
"Standard output stream (:class:`StreamReader`) or ``None`` if the process "
"was created with ``stdout=None``."
msgstr ""
"标准输出流 (:class:`StreamReader`) 或者如果进程创建时设置了 ``stdout=None`` 则为 ``None``。"
#: ../../library/asyncio-subprocess.rst:262
msgid ""
"Standard error stream (:class:`StreamReader`) or ``None`` if the process was"
" created with ``stderr=None``."
msgstr ""
"标准错误流 (:class:`StreamReader`) 或者如果进程创建时设置了 ``stderr=None`` 则为 ``None``。"
#: ../../library/asyncio-subprocess.rst:267
msgid ""
"Use the :meth:`communicate` method rather than :attr:`process.stdin.write() "
"<stdin>`, :attr:`await process.stdout.read() <stdout>` or :attr:`await "
"process.stderr.read <stderr>`. This avoids deadlocks due to streams pausing "
"reading or writing and blocking the child process."
msgstr ""
"使用 :meth:`communicate` 方法而非 :attr:`process.stdin.write() <stdin>`, "
":attr:`await process.stdout.read() <stdout>` 或 :attr:`await "
"process.stderr.read <stderr>`。 这可以避免由于流暂停读取或写入并阻塞子进程而导致的死锁。"
#: ../../library/asyncio-subprocess.rst:276
msgid "Process identification number (PID)."
msgstr "进程标识号(PID)。"
#: ../../library/asyncio-subprocess.rst:278
msgid ""
"Note that for processes created by the :func:`create_subprocess_shell` "
"function, this attribute is the PID of the spawned shell."
msgstr ""
"注意对于由Note that for processes created by the :func:`create_subprocess_shell` "
"函数所创建的进程,这个属性将是所生成的 shell 的 PID。"
#: ../../library/asyncio-subprocess.rst:283
msgid "Return code of the process when it exits."
msgstr "当进程退出时返回其代号。"
#: ../../library/asyncio-subprocess.rst:285
msgid "A ``None`` value indicates that the process has not terminated yet."
msgstr "``None`` 值表示进程尚未终止。"
#: ../../library/asyncio-subprocess.rst:287
msgid ""
"A negative value ``-N`` indicates that the child was terminated by signal "
"``N`` (POSIX only)."
msgstr "一个负值 ``-N`` 表示子进程被信号 ``N`` 中断 (仅 POSIX)."
#: ../../library/asyncio-subprocess.rst:294
msgid "Subprocess and Threads"
msgstr "子进程和线程"
#: ../../library/asyncio-subprocess.rst:296
msgid ""
"Standard asyncio event loop supports running subprocesses from different "
"threads, but there are limitations:"
msgstr ""
#: ../../library/asyncio-subprocess.rst:299
msgid "An event loop must run in the main thread."
msgstr ""
#: ../../library/asyncio-subprocess.rst:301
msgid ""
"The child watcher must be instantiated in the main thread before executing "
"subprocesses from other threads. Call the :func:`get_child_watcher` function"
" in the main thread to instantiate the child watcher."
msgstr ""
#: ../../library/asyncio-subprocess.rst:306
msgid ""
"Note that alternative event loop implementations might not share the above "
"limitations; please refer to their documentation."
msgstr ""
#: ../../library/asyncio-subprocess.rst:311
msgid ""
"The :ref:`Concurrency and multithreading in asyncio <asyncio-"
"multithreading>` section."
msgstr ":ref:`asyncio 中的并发和多线程 <asyncio-multithreading>` 章节。"
#: ../../library/asyncio-subprocess.rst:316
msgid "Examples"
msgstr "例子"
#: ../../library/asyncio-subprocess.rst:318
msgid ""
"An example using the :class:`~asyncio.subprocess.Process` class to control a"
" subprocess and the :class:`StreamReader` class to read from its standard "
"output."
msgstr ""
"一个使用 :class:`~asyncio.subprocess.Process` 类来控制子进程并用 :class:`StreamReader` "
"类来从其标准输出读取信息的例子。"
#: ../../library/asyncio-subprocess.rst:324
msgid ""
"The subprocess is created by the :func:`create_subprocess_exec` function::"
msgstr "这个子进程是由 :func:`create_subprocess_exec` 函数创建的::"
#: ../../library/asyncio-subprocess.rst:355
msgid ""
"See also the :ref:`same example <asyncio_example_subprocess_proto>` written "
"using low-level APIs."
msgstr "另请参阅使用低层级 API 编写的 :ref:`相同示例 <asyncio_example_subprocess_proto>`。"