subprocess等待命令执行完成
时间: 2023-07-28 22:07:43 浏览: 45
在Python中,使用subprocess模块可以启动和控制新的进程。要等待子进程执行完毕,可以使用subprocess模块中的wait()方法或者communicate()方法。
使用wait()方法:
```python
import subprocess
# 执行命令
proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
# 等待命令执行完成
proc.wait()
# 输出命令执行结果
print(proc.stdout.read())
```
使用communicate()方法:
```python
import subprocess
# 执行命令
proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
# 等待命令执行完成并获取命令输出
output, error = proc.communicate()
# 输出命令执行结果
print(output)
```
在这两个方法中,wait()方法会阻塞当前进程,直到子进程执行完成。而communicate()方法则会在子进程执行完成之前阻塞,并返回子进程的标准输出和标准错误流。
相关问题
subprocess 怎么异步执行命令
可以使用 asyncio 库中的 subprocess 模块来异步执行命令。具体步骤如下:
1. 使用 asyncio.create_subprocess_exec() 函数创建一个子进程对象;
2. 调用子进程对象的 communicate() 方法来执行命令,并等待命令执行完成。
示例代码如下:
```python
import asyncio
async def run_command(cmd):
proc = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE)
stdout, _ = await proc.communicate()
return stdout.decode().strip()
async def main():
result = await run_command(['ls', '-l'])
print(result)
asyncio.run(main())
```
subprocess.popen执行cmd命令
可以使用subprocess.Popen来执行cmd命令,例如:
import subprocess
result = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = result.communicate()
print(output.decode('gbk'))
这个例子中,我们使用subprocess.Popen来执行dir命令,并将输出保存到output变量中。注意,我们使用了shell=True参数来启用shell,这样我们就可以执行命令了。同时,我们还使用了stdout=subprocess.PIPE和stderr=subprocess.PIPE参数来捕获输出和错误信息。最后,我们使用了communicate()方法来等待命令执行完成,并获取输出和错误信息。