Update 'shell.py'

This commit is contained in:
JaydenMW 2021-02-14 03:34:00 +01:00
parent 8a8c8ec758
commit da125b1033
1 changed files with 120 additions and 115 deletions

235
shell.py
View File

@ -1,115 +1,120 @@
"""pclish: a simple shell written in Python"""
import os
import subprocess
import psutil
import platform
# Get System Information
RAM = psutil.virtual_memory()
CPU = platform.processor()
# Command Interpretation -- This is the core of the shell
def execute_command(command):
"""execute commands and handle piping"""
try:
if "|" in command:
s_in, s_out = (0, 0)
s_in = os.dup(0)
s_out = os.dup(1)
fdin = os.dup(s_in)
for cmd in command.split("|"):
os.dup2(fdin, 0)
os.close(fdin)
if cmd == command.split("|")[-1]:
fdout = os.dup(s_out)
else:
fdin, fdout = os.pipe()
os.dup2(fdout, 1)
os.close(fdout)
try:
subprocess.run(cmd.strip().split())
except Exception:
print("pclish: command not found: {}".format(cmd.strip()))
os.dup2(s_in, 0)
os.dup2(s_out, 1)
os.close(s_in)
os.close(s_out)
else:
subprocess.run(command.split(" "))
except Exception:
print("pclish: command not found: {}".format(command))
# Commands - Commands are defined here.
def pclish_cd(path):
"""convert to absolute path and change directory"""
try:
os.chdir(os.path.abspath(path))
except Exception:
print("cd: no such file or directory: {}".format(path))
def pclish_help():
print("""pclish: here are the commands available
help: shows this page
cd: change directory
ver: displays shell version
ls: lists files in current dir""")
def pclish_ls():
print("""pclish: this feature is not yet supported""")
def pclish_ver():
print("""pclish: version 0.0.1a.""")
def pclish_mkdir():
value = input("What would you like to name this new directory:\n")
dir = value
os.mkdir(dir)
def pclish_system():
print("""System: XCU Python Based Shell Env""")
print("RAM:")
print(RAM)
print("CPU:")
print(CPU)
def pclish_shtdwnsubsys():
print("Shutting Down XCU Python Based Shell Env")
exit()
# Shell Prompt Customization and step 2 of command interpritation
def main():
while True:
inp = input("shell@system >> ")
if inp == "exit":
break
elif inp[:3] == "cd ":
pclish_cd(inp[3:])
elif inp == "help":
pclish_help()
elif inp == "ver":
pclish_ver()
elif inp == "ls":
pclish_ls()
elif inp == "mkdir":
pclish_mkdir()
elif inp == "shtdwnsubsys":
pclish_shtdwnsubsys()
elif inp == "system":
pclish_system()
else:
execute_command(inp)
# Main
if '__main__' == __name__:
main()
"""pclish: a simple shell written in Python"""
import os
import subprocess
import psutil
import platform
# Get System Information
RAM = psutil.virtual_memory()
CPU = platform.processor()
# Command Interpretation -- This is the core of the shell
def execute_command(command):
"""execute commands and handle piping"""
try:
if "|" in command:
s_in, s_out = (0, 0)
s_in = os.dup(0)
s_out = os.dup(1)
fdin = os.dup(s_in)
for cmd in command.split("|"):
os.dup2(fdin, 0)
os.close(fdin)
if cmd == command.split("|")[-1]:
fdout = os.dup(s_out)
else:
fdin, fdout = os.pipe()
os.dup2(fdout, 1)
os.close(fdout)
try:
subprocess.run(cmd.strip().split())
except Exception:
print("pclish: command not found: {}".format(cmd.strip()))
os.dup2(s_in, 0)
os.dup2(s_out, 1)
os.close(s_in)
os.close(s_out)
else:
subprocess.run(command.split(" "))
except Exception:
print("pclish: command not found: {}".format(command))
# Commands - Commands are defined here.
def pclish_cd(path):
"""convert to absolute path and change directory"""
try:
os.chdir(os.path.abspath(path))
except Exception:
print("cd: no such file or directory: {}".format(path))
def pclish_echo
txt = input("What would you like to echo?:\n")
echo(txt)
def pclish_help():
print("""pclish: here are the commands available
help: shows this page
cd: change directory
ver: displays shell version
ls: lists files in current dir""")
def pclish_ls():
print("""pclish: this feature is not yet supported""")
def pclish_ver():
print("""pclish: version 0.0.1a.""")
def pclish_mkdir():
value = input("What would you like to name this new directory:\n")
dir = value
os.mkdir(dir)
def pclish_system():
print("""System: XCU Python Based Shell Env""")
print("RAM:")
print(RAM)
print("CPU:")
print(CPU)
def pclish_shtdwnsubsys():
print("Shutting Down XCU Python Based Shell Env")
exit()
# Shell Prompt Customization and step 2 of command interpritation
def main():
while True:
inp = input("shell@system >> ")
if inp == "exit":
break
elif inp[:3] == "cd ":
pclish_cd(inp[3:])
elif inp == "help":
pclish_help()
elif inp == "ver":
pclish_ver()
elif inp == "ls":
pclish_ls()
elif inp == "mkdir":
pclish_mkdir()
elif inp == "shtdwnsubsys":
pclish_shtdwnsubsys()
elif inp == "system":
pclish_system()
elif inp = "echo":
pclish_echo()
else:
execute_command(inp)
# Main
if '__main__' == __name__:
main()