Pythonで非同期的にシェルコマンドを実行する方法
Pythonでは、サププロセスモジュールを利用することで、サブプロセスを作成・管理し、外部コマンドを実行することができます。サププロセスモジュールは、シェルコマンド呼び出しのための同期呼び出しと非同期呼び出しを含む、さまざまな方法を提供しています。
シェルコマンドの非同期呼び出しには2つの方法があります。
- サブプロセスのProcessオブジェクト
- ネイティブに伝える
import subprocess
def run_command_async(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return process
command = "ls -l"
process = run_command_async(command)
output, error = process.communicate()
print(output.decode())
- 非同期I/O
- 非同期 I/O
- create_subprocess_shell
import asyncio
async def run_command_async(command):
process = await asyncio.create_subprocess_shell(command, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
output, error = await process.communicate()
return output
async def main():
command = "ls -l"
output = await run_command_async(command)
print(output.decode())
asyncio.run(main())
非同期にシェルコマンドを実行するには、非同期タスクとイベントループを管理するためにasyncioライブラリを使用する必要があることに注意してください。