#python #subprocess
#питон #подпроцесс
Вопрос:
Как я могу использовать перенаправление ввода lt;()
с помощью python subprocess.Popen
?
Например, скажем, у меня есть:
import subprocess class Test(): def __init__(self): self.proc = subprocess.Popen(["sort file1.txt file2.txt)"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) def __iter__(self): return self def __next__(self): while True: line = self.proc.stdout.readline() if not line: raise StopIteration return line.strip().decode('utf-8') t = Test() for line in t: print(line)
Вышесказанное работает отлично, но на самом деле мне нужна команда, чтобы сделать что-то вроде:
sort lt;(python file1.txt) lt;(python file2.txt)
Это, похоже, ничего не запускает, хотя даже это не работает
sort lt;(cat file1.txt) lt;(cat file2.txt)
Как я могу заставить это работать с подпроцессом python и перебирать результаты строка за строкой
Ответ №1:
Вы должны сообщить подпроцессу.Использовать Popen () /bin/bash
, который поддерживает lt;(..)
синтаксис, вместо функции по умолчанию /bin/sh
, которая не:
def __init__(self): self.proc = subprocess.Popen(["sort lt;(cat file1.txt) lt;(cat file2.txt)"], shell=True, executable="/bin/bash", stdout=subprocess.PIPE, stderr=subprocess.PIPE) def __iter__(self): return self def __next__(self): while True: line = self.proc.stdout.readline() if not line: raise StopIteration return line.strip().decode('utf-8') t = Test() for line in t: print(line)
Комментарии:
1. Отлично, это отлично работает