Próbuję przypisać wyjście polecenia do zmiennej bez polecenia myślenie, że jest podłączony. Powodem tego jest to, że dane polecenie podaje niesformatowany tekst jako wynik, jeśli jest podłączony, ale daje tekst sformatowany w kolorze, jeśli jest uruchamiany z terminala. Muszę uzyskać ten sformatowany tekst w kolorze.Python 3.4.3 subprocess.Popen uzyskać wyjście polecenia bez rurociągów?
Do tej pory próbowałem kilku rzeczy. Próbowałem POPEN tak:
output = subprocess.Popen(command, stdout=subprocess.PIPE)
output = output.communicate()[0]
output = output.decode()
print(output)
To pozwoli mi wydrukować wyjście, ale to daje mi wyjście niesformatowany że dostanę gdy polecenie jest rurami. To ma sens, ponieważ robię to tutaj w kodzie Pythona. Ale jestem ciekawy, czy istnieje sposób, aby przypisać wyjście tego polecenia bezpośrednio do zmiennej, bez polecenia uruchamiającego swoją wersję potokową.
Próbowałem również następującą wersję, która opiera się na check_output Zamiast:
output = subprocess.check_output(command)
output = output.decode()
print(output)
I znowu uzyskać taki sam efekt niesformatowany że powraca dowodzenia, gdy polecenie jest przetłaczany.
Czy istnieje sposób na uzyskanie sformatowanego wyjścia, na wyjściu, które polecenie zwykle wydaje z terminala, gdy nie jest podłączone?
Myślę, że "kolorystyka" jest funkcją powłoki/tty. Kolory nie są częścią wyjścia polecenia. Więc nie będziesz w stanie odzyskać niczego poza tym niesformatowanym wynikiem. – GhostCat
Cześć EddyG, czasami to prawda, ale sam możesz przesłać kod formatowania kolorów do terminalu. Tak jest w tym przypadku. Sprawdziłem dwukrotnie źródło C samej komendy i rzeczywiście wysłałem kod formatowania kolorów. Więc to nie jest tylko tty. – nullified
powiązane: [Ostatnia linia niebuforowana nie może być odczytana] (http://stackoverflow.com/q/25923901/4279) – jfs