首页 > 解决方案 > 使用自定义输入和输出的 Python 3 子进程

问题描述

我做了2个类: Input哪个实现read方法, Output哪个实现write方法

我正在尝试调用 shell 命令并捕获输入和输出。这是我的代码:

import subprocess
command = "date"
output = Output()
input = Input()
process = subprocess.Popen(command,
                           stdout=output, stdin=input, shell=False)

但是当我检查输出实例时,它说它不包含数据。

标签: python-3.xsubprocessstdout

解决方案


从技术上讲,这些类实例可能是无效参数,除非它们继承自文件对象。

根据文档(强调我的):

stdin、stdout 和 stderr 分别指定执行程序的标准输入、标准输出和标准错误文件句柄。有效值为 PIPE、DEVNULL、现有文件描述符(正整数)、现有文件对象和 None。PIPE 表示应该创建一个通往子级的新管道。DEVNULL 表示将使用特殊文件 os.devnull。默认设置为None,不会发生重定向;子文件句柄将从父文件继承。此外,stderr 可以是 STDOUT,这表明来自应用程序的 stderr 数据应该被捕获到与 stdout 相同的文件句柄中。


推荐阅读