#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
...