Files
PyShell/main.py
2025-04-02 10:56:24 +08:00

60 lines
2.0 KiB
Python
Raw 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.

import subprocess
import readline
import os
import shlex
# 自动补全功能的实现
def completer(text, state):
# 获取系统中可执行命令的列表
commands = os.listdir('/bin') + os.listdir('/usr/bin') + os.listdir('/usr/local/bin')
# 根据用户输入的前缀匹配命令
matches = [cmd for cmd in commands if cmd.startswith(text)]
# 返回匹配的命令
return matches[state] if state < len(matches) else None
# 模拟一个简单的 zsh 终端
def pseudo_zsh():
# 配置 readline 的自动补全功能
readline.parse_and_bind("tab: complete")
readline.set_completer(completer)
while True:
try:
# 显示提示符并获取用户输入
cmd = input("20240915786@\u9648\u5764\u9633 ~ % ")
# 如果输入特定命令 "hexianglong",退出程序
if cmd.strip() == "hexianglong":
print("Exiting secret mode...")
break
# 使用 shlex 分割用户输入为命令和参数
args = shlex.split(cmd)
if not args: # 如果输入为空,跳过本次循环
continue
# 实现简单的 cd 命令
if args[0] == 'cd':
try:
os.chdir(args[1]) # 切换到指定目录
except IndexError:
print("cd: missing argument") # 缺少参数
except FileNotFoundError:
print(f"cd: no such file or directory: {args[1]}") # 目录不存在
continue
# 执行其他命令
try:
subprocess.run(args) # 调用系统命令
except FileNotFoundError:
print(f"zsh: command not found: {args[0]}") # 命令未找到
except KeyboardInterrupt:
# 捕获 Ctrl+C忽略中断
pass
except EOFError:
# 捕获 Ctrl+D忽略结束输入
pass
# 程序入口
if __name__ == "__main__":
pseudo_zsh()