цветные терминалы параллельные различий разбиты на python - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать приложение python для быстрой генерации цветных различий в python. Моя проблема в том, что я могу сгенерировать бок о бок из linux CLI, но различия не работают под python, независимо от того, какую команду я искажал (см. Попытки ниже).

Это правильное поведение , если я запускаю различия из linux CLI (ниже wsltty). Обратите внимание, что я получаю тот же вывод от PuTTY: correct_color_sidebyside_diffs

Это типичное нежелательное поведение при запуске diff из python скрипта ... incorrect_color_sidebyside_diffs

ВОПРОСЫ:

  • Почему нижеприведенные попытки python не приводят к параллельной генерации side diffs?
  • Что я могу сделать (под python) для рендеринга вывода как можно из CLI (скриншот выше)?

Следующий скрипт python содержит попытки, которые я пытался сделать python рендерингом параллельных различий, работают ... короче говоря, я пробовал несколько попыток с Popen(), а также subprocess.run() и os.system() .. .

# filename: test_ydiff.py
from subprocess import run, Popen, PIPE
import shlex, os, pydoc

TEST_01 = True
TEST_02 = True
TEST_03 = True
if TEST_01:
    cmd_01_input   = "diff -u f_01.txt f_02.txt"
    cmd_01_output  = "ydiff -s"
    proc_01_input  = Popen(shlex.split(cmd_01_input),
                                    stdout=PIPE)
    proc_01_output = Popen(shlex.split(cmd_01_output),
        stdin=proc_01_input.stdout, stdout=PIPE)
    stdout_str, stdin_str = proc_01_output.communicate()
    print(stdout_str.decode('utf-8'))

if TEST_02:
    cmd_02_shell    = "diff -u f_01.txt f_02.txt | ydiff -s"
    proc_02_shell   = Popen(cmd_02_shell, shell=True, stdout=PIPE)
    stdout_str, stdin_str = proc_02_shell.communicate()
    print(stdout_str.decode('utf-8'))

if TEST_03:
    run("/usr/bin/diff -u ./f_01.txt ./f_02.txt|/home/mpennington/venv/py37_u18/bin/ydiff -s")

Первый текстовый файл для отображения:

# filename: f_01.txt
!
interface Ethernet0/0
 ip address 10.0.0.1 255.255.255.0
 no ip proxy-arp
 no ip unreachables
 ip access-group FILTER_in in
!

Второй текстовый файл для отображения:

# filename: f_02.txt
!
interface Ethernet0/0
 ip address 10.0.0.1 255.255.255.0
 ip proxy-arp
 no ip unreachables
!

Я работаю Python 3.7 .6 под Ubuntu 18 ... У меня есть ydiff==1.1 (github: ydiff)

1 Ответ

0 голосов
/ 21 апреля 2020

Запуск под os.system(), по крайней мере, исправляет разницу в цветопередаче ... но я пока не понял, почему os.system() исправляет это.

import os

TEST_04 = True
if TEST_04:
    os.system("diff -u f_01.txt f_02.txt | ydiff -s")
...