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

与Python子进程通信

在Python中,可以使用subprocess模块创建和管理子进程

使用 subprocess.run()

subprocess.run() 函数执行指定的命令并等待命令完成。它返回一个 CompletedProcess 实例,其中包含有关执行的命令的信息。

代码语言:javascript
复制
import subprocess

# 执行命令并等待完成
completed_process = subprocess.run(['ls', '-l'], capture_output=True, text=True)

# 打印命令的输出
print(completed_process.stdout)

使用 subprocess.Popen()

subprocess.Popen() 类允许更细粒度的控制子进程。它可以让你启动一个子进程并与之通信。

代码语言:javascript
复制
import subprocess

# 创建一个子进程
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# 读取子进程的输出
stdout, stderr = process.communicate()

# 打印命令的输出
print(stdout)

与子进程进行交互式通信

要实现与子进程的交互式通信,可以使用 subprocess.Popen() 并通过 stdinstdout 管道发送和接收数据。

代码语言:javascript
复制
import subprocess

# 创建一个子进程
process = subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# 向子进程发送数据
process.stdin.write('Hello, World!\n')
process.stdin.flush()

# 从子进程读取数据
output = process.stdout.readline()
print(output.strip())

# 关闭子进程的输入管道以结束进程
process.stdin.close()
return_code = process.wait()

注意事项

  1. 当使用 subprocess.Popen() 时,请确保正确关闭 stdinstdoutstderr 管道,以避免死锁和资源泄漏。
  2. 如果需要处理大量数据,可以使用线程或异步 I/O 来避免阻塞主进程。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券