Я хочу использовать как многострочный вход для команды «cat», так и однострочный ввод в «pwd».вход непосредственно в process.communicate() в библиотеке подпроцессов
Для этого я пытаюсь получить вход непосредственно в process.communicate(), я получаю ошибку обрыва трубы. Что я должен заменить в аргументе?
command = 'cat -'
stdout_value=''
process = subprocess.Popen(shlex.split(command),
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
shell=True)
while True:
if process.poll() is not None:
break
stdout_value = stdout_value + process.communicate(process.stdin)[0]
print(repr(stdout_value))
Этот код получает сообщение об ошибке:
Traceback (most recent call last):
File "try.py", line 67, in <module>
stdout_value = stdout_value + process.communicate(process.stdin)[0]
File "/usr/lib64/python3.5/subprocess.py", line 1068, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.5/subprocess.py", line 1687, in _communicate
input_view = memoryview(self._input)
TypeError: memoryview: a bytes-like object is required, not '_io.BufferedWriter'
[[email protected] try]$ Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe
, что это 'proc.stdin'? – yedpodtrzitko
@yedpodtrzitko это process.stdin, обновил его: P –
'общаться (« HELLO ».encode ('utf-8'))' – furas