Как мне полностью удалить colorama из этого?

#python #colorama

#python #colorama

Вопрос:

У меня есть этот код от друга, но поскольку он на Linux, у него есть colorama, и у меня это не работает, что затрудняет чтение и / или копирование и вставку результатов, когда с цветовыми кодами все в порядке. Что мне нужно отредактировать, чтобы colorama в нем не было?

 #!/usr/bin/python3
import requests
import json
import sys
import struct
import socket
import colorama
from colorama import Fore

indent = "  "


def ip2bin(ip):  # Credit to converter
    binary = bin(struct.unpack('!I', socket.inet_aton(ip))[0])
    return binary


def arg_length():
    return len(sys.argv)


def print_help():
    print("Commands:")
    print("** ipl -i <ip> - Gets information from an IP address")
    print("** ipl -h - Displays this page.")


def lookup(ip):
    print("Looking up IP address ""   str(ip)   ""..")

    re = requests.get("https://ipinfo.io/"   str(ip)   "/json")

    j = json.loads(re.content)

    postal = ''
    loc = ''
    hostname = ''

    print("IP Information:")

    for key, value in j.items():
        maininfo = True
        if str(key) == "error":
            print("Error: Invalid IP address")
            exit(0)
        if str(key) != "readme":
            if key == "postal":
                postal = value
                maininfo = False
            if key == "loc":
                loc = value
                maininfo = False
            if key == 'hostname':
                loc = value
                maininfo = False
            if maininfo:
                print(indent   key, "-", Fore.BLUE   value   Fore.WHITE)

    binary = ip2bin(ip).replace('0b', '')

    ipClass = 'Class '

    if binary.startswith("0"):
        ipClass  = 'A'

    elif binary.startswith('10'):
        ipClass  = 'B'

    elif binary.startswith('110'):
        ipClass  = 'C'

    elif binary.startswith('1110'):
        ipClass  = 'D'

    elif binary.startswith('1111'):
        ipClass  = 'E'

    print("Additional Information:")
    print(indent   "IP Class: "   Fore.BLUE   ipClass   Fore.WHITE)
    print(indent   "Postal Code: "   Fore.BLUE   postal   Fore.WHITE)
    print(indent   "Long/Lat: "   Fore.BLUE   loc   Fore.WHITE)
    if not hostname == '':
        print("Hostname: "   hostname)


if arg_length() == 1 or arg_length() == 2:
    print_help()
if arg_length() == 3:
    if str(sys.argv[1]) == "-i":
        lookup(str(sys.argv[2]))
    else:
        print_help()
  

Комментарии:

1. Я думаю, вы могли бы разобраться в этом сами, если бы удалили модуль colorama (и его подмодули), вы увидите несколько строк с ошибкой, затем вы можете исправить эти строки так, как вы хотите.

Ответ №1:

Просто удалите все виды использования colorama и Fore, вот так:

 #!/usr/bin/python3
import requests
import json
import sys
import struct
import socket

indent = "  "


def ip2bin(ip):  # Credit to converter
    binary = bin(struct.unpack('!I', socket.inet_aton(ip))[0])
    return binary


def arg_length():
    return len(sys.argv)


def print_help():
    print("Commands:")
    print("** ipl -i <ip> - Gets information from an IP address")
    print("** ipl -h - Displays this page.")


def lookup(ip):
    print("Looking up IP address ""   str(ip)   ""..")

    re = requests.get("https://ipinfo.io/"   str(ip)   "/json")

    j = json.loads(re.content)

    postal = ''
    loc = ''
    hostname = ''

    print("IP Information:")

    for key, value in j.items():
        maininfo = True
        if str(key) == "error":
            print("Error: Invalid IP address")
            exit(0)
        if str(key) != "readme":
            if key == "postal":
                postal = value
                maininfo = False
            if key == "loc":
                loc = value
                maininfo = False
            if key == 'hostname':
                loc = value
                maininfo = False
            if maininfo:
                print(indent   key, "-", value)

    binary = ip2bin(ip).replace('0b', '')

    ipClass = 'Class '

    if binary.startswith("0"):
        ipClass  = 'A'

    elif binary.startswith('10'):
        ipClass  = 'B'

    elif binary.startswith('110'):
        ipClass  = 'C'

    elif binary.startswith('1110'):
        ipClass  = 'D'

    elif binary.startswith('1111'):
        ipClass  = 'E'

    print("Additional Information:")
    print(indent   "IP Class: "   ipClass)
    print(indent   "Postal Code: "   postal)
    print(indent   "Long/Lat: "   loc)
    if not hostname == '':
        print("Hostname: "   hostname)


if arg_length() == 1 or arg_length() == 2:
    print_help()
if arg_length() == 3:
    if str(sys.argv[1]) == "-i":
        lookup(str(sys.argv[2]))
    else:
        print_help()
  

Я думаю, что люди голосуют против вас, потому что вы проявили недостаток усилий. Однако мне потребовалось 20 секунд, чтобы решить вашу проблему, поэтому я не против ответить.

Возможно, было бы лучше просто использовать мой ответ, а затем удалить ваш вопрос.

Ответ №2:

Если вы вызываете init функцию colorama после импорта colorama, она должна гарантировать, что выходные данные совместимы с Windows (при условии, что вы используете Windows).

В Windows вызов init () отфильтрует escape-последовательности ANSI из любого текста, отправленного в stdout или stderr, и заменит их эквивалентными вызовами Win32.

 import colormama
from colorama import Fore
from colorama import init

init()

# The rest of the module 
...