首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Python异步运行外部命令?

要从Python异步运行外部命令,可以使用asyncio库。asyncio库是Python的异步I/O框架,它允许您编写并发代码,使用asyncawait关键字处理异步任务。以下是一个简单的示例,演示如何使用asyncio异步运行外部命令:

代码语言:python
复制
import asyncio
import subprocess

async def run_command(command):
    process = await asyncio.create_subprocess_shell(
        command,
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE
    )

    stdout, stderr = await process.communicate()

    if process.returncode != 0:
        raise Exception(f"Command '{command}' failed with error: {stderr.decode('utf-8')}")

    return stdout.decode('utf-8')

async def main():
    command1 = "echo 'Hello, World!'"
    command2 = "echo 'Goodbye, World!'"

    task1 = asyncio.create_task(run_command(command1))
    task2 = asyncio.create_task(run_command(command2))

    output1 = await task1
    output2 = await task2

    print(f"Output from command 1: {output1}")
    print(f"Output from command 2: {output2}")

if __name__ == "__main__":
    asyncio.run(main())

在这个示例中,我们定义了一个名为run_command的异步函数,它使用asyncio.create_subprocess_shell创建一个子进程,并使用await process.communicate()等待子进程完成。然后,我们在main函数中创建两个任务,分别运行两个外部命令,并使用await等待它们完成。最后,我们打印命令的输出。

这个示例可以帮助您从Python异步运行外部命令。请注意,这个示例仅适用于Python 3.7及更高版本。如果您使用的是较旧的Python版本,可能需要使用其他方法来实现异步。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 异步: 创建和运行异步任务(7)

您可以 asyncio 程序中的协程创建任务对象。任务提供独立调度和运行的协程的句柄,并允许查询、取消任务,以及稍后检索结果和异常。异步事件循环管理任务。...什么是异步任务异步任务是一个调度并独立运行 asyncio 协程的对象。它提供了一个调度协程的句柄,asyncio 程序可以查询并使用它来与协程交互。任务是协程创建的。...因为异步任务是可等待的,这意味着协程可以使用 await 表达式等待任务完成。.......# wait for a task to be doneawait task现在我们知道什么是 asyncio 任务,让我们看看如何创建一个。2. 如何创建任务使用提供的协程实例创建任务。...这是 asyncio 程序中的协程创建任务的首选方法。2.2. 低级 API也可以使用较低级别的 asyncio API 协程创建任务。

1.5K00

Python 异步: 创建和运行异步任务(7)

您可以 asyncio 程序中的协程创建任务对象。任务提供独立调度和运行的协程的句柄,并允许查询、取消任务,以及稍后检索结果和异常。异步事件循环管理任务。...什么是异步任务 异步任务是一个调度并独立运行 asyncio 协程的对象。它提供了一个调度协程的句柄,asyncio 程序可以查询并使用它来与协程交互。 任务是协程创建的。...因为异步任务是可等待的,这意味着协程可以使用 await 表达式等待任务完成。...如何创建任务 使用提供的协程实例创建任务。回想一下协程是使用 async def 表达式定义的,看起来像一个函数。...这是 asyncio 程序中的协程创建任务的首选方法。 2.2. 低级 API 也可以使用较低级别的 asyncio API 协程创建任务。

72610

Python异步: 定义、创建和运行协程(5)

我们可以在我们的 Python 程序中定义协程,就像定义新的子例程(函数)一样。一旦定义,协程函数可用于创建协程对象。...“asyncio”模块提供了在事件循环中运行协程对象的工具,事件循环是协程的运行时。1. 如何定义协程协程可以通过“async def”表达式定义。这是用于定义子例程的“def”表达式的扩展。...“协程”Python 对象具有方法,例如 send() 和 close()。它是一种类型。我们可以通过创建协程实例并调用 type() 内置函数来报告其类型来证明这一点。...这意味着它是一个实现了 await() 方法的 Python 类型。3. 如何 Python 运行协程可以定义和创建协程,但它们只能在事件循环中执行。...、创建和运行协程,让我们花点时间了解事件循环。

51830

Python 异步: 同时运行多个协程(10)

如何使用 Asyncio gather()在本节中,我们将仔细研究如何使用 asyncio.gather() 函数。asyncio.gather() 函数将一个或多个可等待对象作为参数。...这意味着如果调用者什么都不做,那么预定的可等待对象组将运行(假设调用者挂起)。这也意味着您不必等待 gather() 返回的 Future。......# run the group of awaitablesawait group等待 gather() 返回的 Future 将返回可等待对象的返回值列表。...然后 main() 协程等待调用 gather() 返回的 Future 对象,暂停并等待所有调度的协程完成它们的执行。协程会尽快运行,报告它们独特的消息并在终止前休眠。...这突出了我们如何准备协程集合并将它们作为单独的表达式提供给 gather() 函数。

98700

Python 异步: 同时运行多个协程(10)

如何使用 Asyncio gather() 在本节中,我们将仔细研究如何使用 asyncio.gather() 函数。 asyncio.gather() 函数将一个或多个可等待对象作为参数。...这意味着如果调用者什么都不做,那么预定的可等待对象组将运行(假设调用者挂起)。 这也意味着您不必等待 gather() 返回的 Future。...... # run the group of awaitables await group 等待 gather() 返回的 Future 将返回可等待对象的返回值列表。...然后 main() 协程等待调用 gather() 返回的 Future 对象,暂停并等待所有调度的协程完成它们的执行。协程会尽快运行,报告它们独特的消息并在终止前休眠。...这突出了我们如何准备协程集合并将它们作为单独的表达式提供给 gather() 函数。

1.4K20

python asyncio 异步 IO - 协程(Coroutine)与运行

前言 Python 在 3.5 版本中引入了关于协程的语法糖 async 和 await, 在 python3.7 版本可以通过 asyncio.run() 运行一个协程。...所以建议大家学习协程的时候使用 python3.7+ 版本,本文示例代码在 python3.8 上运行的。...在前面这个示例中,fun_a() 和 fun_b()是按顺序执行的,这跟我们之前写的函数执行是一样的,看起来没啥差别,接着看如何并发执行2个协程任务 asyncio.create_task() 函数用来并发运行作为...end : 1646010556.108237 ---- ------hello end : 1646010557.08811 ---- -----------end start---------- 运行的结果可以看到...start: 1646010904.3481765 ------world end : 1646010906.3518314 ---- -----------end start---------- 运行结果看到

1.5K10

Python异步: 定义、创建和运行协程(5)

我们可以在我们的 Python 程序中定义协程,就像定义新的子例程(函数)一样。一旦定义,协程函数可用于创建协程对象。...“asyncio”模块提供了在事件循环中运行协程对象的工具,事件循环是协程的运行时。 1. 如何定义协程 协程可以通过“async def”表达式定义。这是用于定义子例程的“def”表达式的扩展。...“协程”Python 对象具有方法,例如 send() 和 close()。它是一种类型。 我们可以通过创建协程实例并调用 type() 内置函数来报告其类型来证明这一点。...这意味着它是一个实现了 await() 方法的 Python 类型。 3. 如何 Python 运行协程 可以定义和创建协程,但它们只能在事件循环中执行。...、创建和运行协程,让我们花点时间了解事件循环。

48010

Python运行Excel VBA

有时候,我们可能想要从Python运行Excel VBA宏,特别是当想要运行已有的Excel宏时,这很有用——甚至可以在不打开Excel文件的情况下执行这些VBA宏。...注意,要安装py32win库,在命令提示符下键入以下命令: pip install pywin32 然而,要在Python中导入该库,则其名字成为win32com.client: import win32com.client...当然,可以创建任何宏并使用Python运行它。...End Sub Python运行VBA宏 现在,将编写Python代码,导入win32com.client开始,并实例化一个“xl”对象来表示Microsoft Excel应用程序。...模块1.mymacro("完美Excel")') wb.Save() xl.Application.Quit() 为了调用VBA宏,使用了xl.Application.Run()方法,其中的参数指示要运行的宏

5.3K20

python如何运行运行程序

python如何运行的 1.写完的py文件,首先被翻译成字节码文件(隐藏后缀pyc),然后在用PVM(虚拟机)把字节码自动编译,之后解释到硬件。...2.如果已经形成过pyc文件,那么你的py文件没有改动,机器重新解释的时候会跳过翻译字节码步骤,首先查看你的.py跟.pyc文件时间戳,如果没有修改那么直接运行pyc文件,否则会重新翻译字节码。...python程序运行 可以在IDE、系统终端、调用os.system()等 这里重点说下【交互窗口】 1.由于代码块是立马执行的,所以可以充当学习、体验的工具。...交互模式注意事项 1.只能输入python命令 2.在文件中打印语句是必须的 3.留意提示符的变换在复合语句时 4.写完复合语句时多输入一个空行 5.复合语句需要注意有格式要求,比如for循环第二行就要空格不能左对齐

2.5K10

Python 异步: 当前和正在运行的任务(9)

如何获取当前任务我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。......一个任务可以创建并运行另一个协程(例如,不包含在任务中)。协程中获取当前任务将为正在运行的任务返回一个 Task 对象,但不会返回当前正在运行的协程。...这是第一个重要的示例,因为它强调所有协程都可以作为异步事件循环中的任务进行访问。下面列出了完整的示例。...如何获取所有任务我们可能需要访问异步程序中的所有任务。这可能有很多原因,例如:反省程序的当前状态或复杂性。记录所有正在运行的任务的详细信息。查找可以查询或取消的任务。...object task_coroutine at 0x10e184f90>> Task-6, 接下来,我们将探讨如何同时运行多个协程

90700

Python 异步: 当前和正在运行的任务(9)

如何获取当前任务 我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。...一个任务可以创建并运行另一个协程(例如,不包含在任务中)。协程中获取当前任务将为正在运行的任务返回一个 Task 对象,但不会返回当前正在运行的协程。...这是第一个重要的示例,因为它强调所有协程都可以作为异步事件循环中的任务进行访问。 下面列出了完整的示例。...如何获取所有任务 我们可能需要访问异步程序中的所有任务。这可能有很多原因,例如: 反省程序的当前状态或复杂性。 记录所有正在运行的任务的详细信息。 查找可以查询或取消的任务。...task_coroutine at 0x10e184f90> > Task-6, 接下来,我们将探讨如何同时运行多个协程

67710

Python如何运行程序

我们在命令行运行这两行代码: 也可以将这两行放到一个文件中,然后去执行这个文件: Python视角 程序员视角,我们把Python代码保存在一个.py文件中,执行这个文件,标准输出会给我们返回结果...然而,Python运行时,其实还有一些事情发生。 当Python运行脚本时,在代码开始进行处理之前,Python还会执行一些步骤。...2、Python虚拟机(PVM) 一旦程序编译成字节码(或字节码已经存在的.pyc文件中载入),之后的字节码发送到PVM上执行。PVM不是一个独立的程序,不需要安装。...PVM是迭代运行字节码指令的一个大循环,一个接一个的完成操作。PVM是便宜Python运行引擎,表现为Python系统的一部分,并且它是实际运行脚本的组件。...技术上讲,它才是Python解释器的最后一步。 Python的传统运行执行模式:录入的源代码转换为字节码,之后字节码在PVM中运行

1.1K10

如何快速切换Python运行版本,如何选择Python版本

想必在学习Python时会面临选择Python2.X或者是Python3.X的问题。...我在电脑上不同位置下载安装了不同版本 的Python,当我在学习时,不管是需要哪一个版本才能运行都无所谓,相应的快速切换版本即可。 在你电脑的 环境变量 里面更改设置,如下: ?...我的Python安装位置是(配置的path中路径也如下): D:\Program Files\Python36;D:\Program Files\Python36\Scripts; C:\Python27...; C:\Python27\Scripts; 注意分号; 两个版本随意切换只要你更改环境变量里面的path就可以了; 当然也可以更改系统变量下的path,因为系统变量下更改之后是针对所有用户生效,某某的用户变量值针对当前用户生效...查看更改后对应版本是否生效如下: 对应Python 2.7版本 ? 对应Python 3.6版本 ? ----

1.8K50

python如何使用代码运行助手

python代码运行助手是能在网页上运行python语言的工具。因为python运行环境在很多教程里都是用dos的,黑乎乎的界面看的有点简陋,所以出了这python代码运行助手,作为ide。...实际上,python代码运行助手界面只能算及格分,如果要找ide,推荐使用jupyter。jupyter被集成到ANACONDA里,只要安装了anacoda就能使用了。....bat’ 3、把“运行.bat”和“learning.py”放到同一目录下。...4、双击运行运行.bat”,之后会弹出黑色的dos窗口,这个窗口不要关闭。 ? 5、输入网址对应的网址和端口,整个过程就完成了。 ? 知识点扩展: Python在线运行代码助手 #!...如何使用代码运行助手的文章就介绍到这了,更多相关python代码运行助手用法内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

2.5K21

【原创】Rust tokio 如何异步非阻塞方式运行大量任务

tokio 官方给了一个完整的例子:手动构建 runtime ,利用 block_on 来运行多个任务。...总耗时:103 ms 可以看到,my_bg_task 实际是异步非阻塞执行的 : 异步:因为每个任务不必等待其结果就可以开始下一个任务,即; // 异步 Task 0 sleeping for 100...的打印顺序只与任务各自的运行 (sleep) 时间有关,与源代码的声明执行顺序无关。只有任务之间快速切换才能做到这一点。...回顾官网的例子:10 个任务的 sleep 时间线性递减 (let millis = 1000 - 50 * i;), 6 个任务开始小于主线程 sleep 任务的时间(750 ms),而等待 10...", i); } 运行结果:异步阻塞 Finished time-consuming task. Task 0 sleeping for 100 ms.

4K30

解锁Flutter中的ProcessResult:让外部命令执行变得轻松

让我们通过一个示例来演示如何处理外部命令的错误信息。...进阶用法在实际应用中,我们可能会遇到需要异步执行外部命令的情况,以及处理外部命令执行过程中可能出现的错误和异常。让我们来看看如何使用 ProcessResult 来处理这些情况。...异步执行外部命令有时候,我们可能需要在 Flutter 应用程序中异步执行外部命令,以避免阻塞主线程。...import 'dart:io';void main() async { // 异步执行外部命令,比如运行一个长时间的脚本 Process process = await Process.start...通过这些进阶用法的示例,我们可以更好地掌握如何在 Flutter 应用程序中异步执行外部命令,并处理可能出现的错误和异常情况。这将帮助我们编写更加健壮和可靠的应用程序,并提供更好的用户体验。

25810
领券