scripts/utool/utool.py

198 lines
7.0 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/python3
# coding: utf-8
import os
import sys
import time
def utool(option):
def print_usage():
intro = """utool -- A self-defined command line interface, which is used to facilitate operating the system, supports the following options. In the description part, where there is a leading asterisk signifies that this option must take an argument, and for more information of this situation, simply run `utool -h` for details."""
print(f"{c_intro}{intro}{c_e}")
print("_" * 121)
print(f"{c_title}|Option| Description{' ' * 40}|Option| Description{' ' * 40}|{c_e}")
count = 0
for opt, desc in dict_func.items():
description = "" if desc[0] == "Reserved" else desc[0]
if count % 2 == 0:
print(f"{c_text}|{opt:^6}|{description:<52}{c_e}", end="")
else:
print(f"{c_text}|{opt:^6}|{description:<52}|{c_e}")
count += 1
exit(100)
# -a
def list_local_using_port():
exit_on_wrong_number()
os.system('/usr/bin/bash /opt/git/scripts/utool/ipports.sh port')
# -b
def github_two_factor():
exit_on_wrong_number()
os.system("/usr/bin/oathtool -b --totp 'G3NHHFO2L2LZ5W2R'")
# -c
def get_external_ip():
exit_on_wrong_number()
os.system("/usr/bin/python3 /opt/git/scripts/roll_api/get_self_ip.py")
# -d
def get_ip_location():
exit_on_wrong_number(2)
import re
checked_ip = sys.argv[2]
ipv4 = re.match(r"^((([01]?\d\d?)|(2[0-4]\d)|(25[0-5]))\.){3}(([01]?\d\d?)|(2[0-4]\d)|(25[0-5]))$", checked_ip)
if ipv4:
os.environ['checked_ip'] = checked_ip
os.system('/usr/bin/python3 /opt/git/scripts/roll_api/get_ip.py $checked_ip')
else:
print(f"{c_br}Plz enter correct IP...{c_e}")
exit(ord(option.strip('-')))
# -e
def gen_md5():
if len(sys.argv) < 3:
print(f"{c_br}需要至少一个字符串作为输入,退出...{c_e}\n")
exit(ord(option.strip('-')))
param=''
for item in sys.argv[2:]:
param += item
os.environ['param'] = param
print(f"{c_by}Warning: 输入字符串中间的任何空白符将会被删除,要保留的话,需手动将字符串用单引号括起来{c_e}")
print(f"本次计算MD5值的字符串为 - {param}\n本次计算得到的MD5的值为 - ", end='')
# print(f"本次计算得到的MD5的值为 - ", end='')
os.system('echo -n $param | md5sum | cut -d " " -f 1')
# -f
def number2date():
exit_on_wrong_number(2)
os.environ['param'] = sys.argv[2]
os.system('/usr/bin/bash /opt/git/scripts/utool/number2d.sh $param')
# -g
def date2number():
if len(sys.argv) < 3:
print(f"{c_br}-g选项将输入的时间转换成十进制和十六进制需要一个字符串格式的时间作为输入退出...{c_e}\n")
exit(ord(option.strip('-')))
param=''
for item in sys.argv[2:]:
param += item + ' '
os.environ['param'] = param
os.system('/usr/bin/bash /opt/git/scripts/utool/date2n.sh $param')
# -h
def usage():
exit_on_wrong_number()
print_usage()
# -i
def ps_top_20():
exit_on_wrong_number()
os.system("/usr/bin/bash /opt/git/scripts/utool/ps_top_20.sh")
# -j
def docker_pid():
exit_on_wrong_number(2)
os.environ['param'] = sys.argv[2]
os.system('/usr/bin/bash /opt/git/scripts/utool/pid_in_docker.sh $param')
# -k
def company_two_factor():
exit_on_wrong_number()
# method 1
# os.system("/usr/bin/echo -n 'ujjpsx7q'")
# os.system("/usr/bin/oathtool -b --totp '22IH2VYKEQYOWVFCCHY5KTU4CYTJ7Z3O'")
# method 2
pin = 'ujjpsx7q'
totp = os.popen("/usr/bin/oathtool -b --totp '22IH2VYKEQYOWVFCCHY5KTU4CYTJ7Z3O'").read()
res = pin + totp
print(res, end='')
return res
# -p
def gen_passwd():
exit_on_wrong_number(2)
os.environ['length'] = sys.argv[2]
os.system('/usr/bin/bash /opt/git/scripts/utool/genpw.sh length')
def exit_on_wrong_number(number=1):
if len(sys.argv) != (number+1):
print(f"{c_br}{sys.argv[1:]}: Wrong arguments!")
print(f"Option `{option}' will {dict_func[option][0].strip()}")
print(f"NEED: {number}\tGIVE: {len(sys.argv)-1}\n{c_e}")
exit(ord(option.strip('-')))
dict_func = {
'-a': [' print all local ports of using for now', list_local_using_port],
'-n': ['Reserved', None],
'-b': [' generate two-factor key of GITHUB', github_two_factor],
'-o': ['Reserved', None],
'-c': [' show external IP of this machine', get_external_ip],
'-p': ['*generate password of length 1~79', gen_passwd],
'-d': ['*show the location of ip(only v4 for now)', get_ip_location],
'-q': ['Reserved', None],
'-e': ['*generate md5 value of the input string', gen_md5],
'-r': ['Reserved', None],
'-f': ['*convert a (hexa)decimal to specific time format', number2date],
'-s': ['Reserved', None],
'-g': ['*convert multi-formats time to a decimal', date2number],
'-t': ['Reserved', None],
'-h': [' show this help information and exit', print_usage],
'-u': ['Reserved', None],
'-i': [' print top 20 mem and cpu process', ps_top_20],
'-v': ['Reserved', None],
'-j': ['*find a docker subprocess, if true then print info', docker_pid],
'-w': ['Reserved', None],
'-k': [' generate two-factor key of GITHUB', company_two_factor],
'-x': ['Reserved', None],
'-l': ['Reserved', None],
'-y': ['Reserved', None],
'-m': ['Reserved', None],
'-z': ['Reserved', None],
}
return dict_func[option][1]
def main():
global option
options = [ '-' + chr(x) for x in range(ord('a'), ord('z')+1)]
print_usage = utool('-h')
if len(sys.argv) > 1:
option = sys.argv[1]
if option in options:
func = utool(option)
if func == None:
print(f"{c_bg}Option `{option}' is reserved for now...{c_e}\n")
else:
func()
else:
print_usage()
else:
print_usage()
# global area below ↓
c_title = '\033[1;4;37;40m' # title color
c_text = '\033[37;40m' # text color
c_intro = '\033[3;32m' # text color
c_br = '\033[1;31m' # bold red
c_bg = '\033[1;32m' # bold green
c_by = '\033[1;33m' # bold yellow
c_bb = '\033[1;34m' # bold blue
c_bp = '\033[1;35m' # bold purple
c_bc = '\033[1;36m' # bold cyan
c_bir= '\033[1;3;31m' # * bold italic red
c_bib = '\033[1;3;34m' # * bold italic cyan
c_bic = '\033[1;3;36m' # bold italic cyan
c_e = '\033[0m' # reset
if __name__ == '__main__':
main()