上一篇文章链接:
基于 Python 3.12.4 和 PySide 6 的 假用户操作系统【0-0】虚拟终端框架-CSDN博客https://blog.csdn.net/2402_84665876/article/details/141439394
基本目标:
方法 use 代码:
def use(self, args: list[str]):
o_path = path.abspath(".")
if args[1].strip() != "in":
try:
print(args[0].strip()[len(args[0]) - 3:])
if args[0].strip()[len(args[0]) - 3:] != ".py":
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
else:
try:
print(f"import {args[0][:len(args[0])-3].strip()}")
exec(f"import {args[0][:len(args[0])-3].strip()}")
except:
print("无效导入:指定的文件不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
except:
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {len(args[0])}")
finally:
chdir(o_path)
sys.path.clear()
sys.path.append(o_path)
else:
try:
if path.isdir(args[2].strip()):
chdir(args[2].strip())
if args[0].strip()[len(args[0]) - 3:] != ".py":
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
else:
try:
print(f"import {args[0][:len(args[0]) - 3].strip()}")
exec(f"import {args[0][:len(args[0]) - 3].strip()}")
except:
print("无效导入:指定的文件不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
elif path.isfile(args[2].strip()):
try:
filename, filepath = self.getfilend(args[2].strip())
if filepath is not None:
chdir(filepath)
sys.path.append(filepath)
try:
exec(f"from {filename[:len(filename) - 3].strip()} import {args[0].strip()}")
except Exception as Error:
print("无效导入:指定的文件或模块不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^" * len(args[0])}\n"
f"SystemMsg: {Error}")
except:
print("无效导入:指定的文件目录不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^" * len(args[0])}")
except:
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {len(args[0])}")
finally:
chdir(o_path)
sys.path.clear()
sys.path.append(o_path)
完整代码:
command.py
import sys
from ctypes import windll
from typing import Tuple
from PySide6.QtWidgets import QWidget
from sys import exit as sys_exit
from os import path, chdir
from warnings import filterwarnings
from command_version import CommandVersion
from inspect import getframeinfo, currentframe
class Command:
def __init__(self, UI: QWidget = None):
windll.kernel32.SetConsoleTitleW("FalseOS Command")
filterwarnings("ignore", category=SyntaxWarning)
def run(self, command: str):
if command == "":
return
command += " "
conlist = command.split(" ")
if "exit" == conlist[0].strip():
self.exit()
elif "#" in conlist[0].strip():
print(f"'{conlist[0].strip()}' 不是可导入的模块。")
return
try:
exec(f"self.{conlist[0].strip()}(conlist[1:])")
except:
print(f"'{conlist[0].strip()}' 不是可导入的模块。")
def path(self) -> str:
return path.abspath(".")
@staticmethod
def exit():
sys_exit(0)
@staticmethod
def getstdpath(file_path: str):
if "/" in file_path:
file_path = file_path.replace("/", "\\")
if "*" in file_path:
file_path = file_path.replace("*", " ")
return file_path
def getfilend(self, file_path: str) -> tuple[str, str] | tuple[str, None]:
if "\\" in file_path or "/" in file_path:
stdpath = self.getstdpath(file_path)
stdpath = stdpath.split("\\")
stdname = stdpath[-1]
stddict = self.addlist(stdpath[:len(stdpath) - 1], connect="\\")
return stdname, stddict
else:
return file_path, None
@staticmethod
def about(args):
print(f"应用程序名称:{CommandVersion.name}\n"
f"应用程序版本:{CommandVersion.version}\n"
f"应用程序内部版本:{CommandVersion.build_ver}\n"
f"应用程序证书发行机构:{CommandVersion.creater}")
def cwd(self, args: list[str]):
args0 = args[0]
try:
try:
args0 = args[0].replace("*", " ")
except:
args0 = args[0]
try:
args0 = args0.replace("/", "\\")
except:
pass
chdir(args0)
sys.path.clear()
sys.path.append(args0)
except:
if not self.is_non_str(args0):
print(f"指定的路径无效:\n\tcwd {self.addlist(args, connect=" ")}\n\t {"^" * len(args0)}")
else:
print(f"指定的路径无效:路径为空")
return
@staticmethod
def is_non_str(string: str) -> bool:
for i in string:
if i != " " and i != " " and i != "":
return False
return True
@staticmethod
def addlist(list0: list[str], connect: str):
re0 = ""
for i in list0:
re0 += i
re0 +=connect
return re0
def use(self, args: list[str]):
o_path = path.abspath(".")
if args[1].strip() != "in":
try:
print(args[0].strip()[len(args[0]) - 3:])
if args[0].strip()[len(args[0]) - 3:] != ".py":
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
else:
try:
print(f"import {args[0][:len(args[0])-3].strip()}")
exec(f"import {args[0][:len(args[0])-3].strip()}")
except:
print("无效导入:指定的文件不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
except:
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {len(args[0])}")
finally:
chdir(o_path)
sys.path.clear()
sys.path.append(o_path)
else:
try:
if path.isdir(args[2].strip()):
chdir(args[2].strip())
if args[0].strip()[len(args[0]) - 3:] != ".py":
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
else:
try:
print(f"import {args[0][:len(args[0]) - 3].strip()}")
exec(f"import {args[0][:len(args[0]) - 3].strip()}")
except:
print("无效导入:指定的文件不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^"*len(args[0])}")
elif path.isfile(args[2].strip()):
try:
filename, filepath = self.getfilend(args[2].strip())
if filepath is not None:
chdir(filepath)
sys.path.append(filepath)
try:
exec(f"from {filename[:len(filename) - 3].strip()} import {args[0].strip()}")
except Exception as Error:
print("无效导入:指定的文件或模块不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^" * len(args[0])}\n"
f"SystemMsg: {Error}")
except:
print("无效导入:指定的文件目录不存在。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {"^" * len(args[0])}")
except:
print("无效导入:文件类型错误。"
f"\n\tuse {self.addlist(args, connect=" ")}"
f"\n\t {len(args[0])}")
finally:
chdir(o_path)
sys.path.clear()
sys.path.append(o_path)
其余代码未变,见上一篇文章。