通过shell实现通过命令行界面接收用户的输入,执行用户输入的命令,判断命令是否有效,支持管道和重定向命令,命令执行结果或出错信息在命令行界面显示,提供内部命令用于显示使用帮助和退出本Shell程序的代码
时间: 2024-03-08 17:48:43 浏览: 82
好的,以下是一个简单的Shell程序实现,可以实现以上所有功能:
```python
import os
import subprocess
# 支持的内部命令
internal_commands = {
'help': '显示帮助信息',
'exit': '退出本程序'
}
# 显示帮助信息
def show_help():
print('支持的命令:')
for cmd, desc in internal_commands.items():
print(f'{cmd}: {desc}')
print()
# 执行命令
def run_command(command):
# 判断是否是内部命令
if command in internal_commands:
if command == 'help':
show_help()
elif command == 'exit':
exit(0)
return
# 分割命令
args = command.split()
# 支持重定向
redirect_output = False
if '>' in args:
redirect_output = True
redirect_index = args.index('>')
output_file = args[redirect_index + 1]
args = args[:redirect_index]
# 支持管道
pipe = False
if '|' in args:
pipe = True
pipe_index = args.index('|')
cmd1 = args[:pipe_index]
cmd2 = args[pipe_index + 1:]
else:
cmd1 = args
# 执行命令
if pipe:
p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
p2 = subprocess.Popen(cmd2, stdin=p1.stdout)
p1.stdout.close()
output = p2.communicate()[0]
else:
if redirect_output:
with open(output_file, 'w') as f:
subprocess.call(cmd1, stdout=f)
output = None
else:
output = subprocess.check_output(cmd1)
# 显示命令执行结果
if output:
print(output.decode())
else:
print('Done.')
# 主循环
def main():
while True:
command = input('>>> ')
if not command:
continue
run_command(command)
if __name__ == '__main__':
main()
```
这个Shell程序可以实现通过命令行界面接收用户的输入,执行用户输入的命令,判断命令是否有效,支持管道和重定向命令,命令执行结果或出错信息在命令行界面显示,提供内部命令用于显示使用帮助和退出本Shell程序。
阅读全文