我正在使用Python构建终端模拟器,并且我将命令存储在参数中,例如:
def ls(a):
for item in os.listdir():
print item
a = input('Command: ')
a = a.split()
终端的工作原理如下:
我的cd命令有问题。
def cd(a):
if a == None:
print('cd')
print('Change directories')
else:
os.chdir(os.getcwd() + '/' + a())
当你输入一个没有空格的文件夹时就可以了,就像你在提示符下输入cd Windows
一样,它可以工作。但是当您尝试输入其中包含空格的文件夹时,问题就会出现。当我输入cd Documents Copy
时,它会输入文件夹Documents(如果有的话),或者崩溃。
我如何解决它?我考虑过将所有被调用的函数参数转换成一个,但我不知道该怎么做,可能还有其他方法。
答案 0 :(得分:1)
您需要更复杂的split()
功能 - 请参阅Split a string by spaces — preserving quoted substrings answer了解可能的解决方案。
<强>更新强>
如果您有一个名为&#34的子目录,那么狗&#34;如果你的翻译中有空格,你可以这样做:
Command: cd "the dog"
代码修改大致如下:
import shlex
import os
def ls(a):
for item in os.listdir():
print(item)
def cd(a):
if a == None:
print('cd')
print('Change directories')
else:
os.chdir(os.getcwd() + '/' + a)
a = input('Command: ')
a = shlex.split(a)
if len(a) > 1:
locals()[a[0]](a[1][:99])
print()
else:
locals()[a[0]](None)
print()