Python 3 Подпроцесс с использованием пользовательского ввода и вывода - PullRequest
0 голосов
/ 22 марта 2020

Я сделал 2 класса: Input, который реализует метод read, и Output, который реализует метод write

Я пытаюсь вызвать команду оболочки и захватить ввод и вывод. Это мой код:

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

, но когда я проверяю выходной экземпляр, он говорит, что он не содержит данных.

1 Ответ

2 голосов
/ 22 марта 2020

Технически, эти экземпляры класса, вероятно, являются недопустимыми параметрами, если только они не наследуются от файлового объекта.

Согласно документации (выделено мной):

stdin, stdout и stderr определяют стандартный ввод исполняемой программы, стандартный вывод и дескрипторы стандартного файла ошибок соответственно. Допустимые значения: PIPE, DEVNULL, существующий дескриптор файла (положительное целое число), существующий объект файла и None . PIPE указывает, что должна быть создана новая труба для дочернего элемента. DEVNULL указывает, что будет использоваться специальный файл os.devnull. При настройках по умолчанию None перенаправление не происходит; дескрипторы файла ребенка будут унаследованы от родителя. Кроме того, stderr может быть STDOUT, что означает, что данные stderr из приложений должны быть записаны в тот же дескриптор файла, что и для stdout.

...