如何将所有调用的函数参数变成一个 (Python 3)

How to turn all called function arguments into one (Python 3)

我正在 Python 中构建一个终端模拟器,我将命令存储在参数中,例如:

def ls(a):
    for item in os.listdir():
        print item

a = input('Command: ')
a = a.split()

终端是这样工作的:

  1. 要求用户输入
  2. 拆分输入
  3. 使用输入的第一部分在本地搜索函数
  4. 如果有,则使用输入的其余部分作为参数
  5. 调用函数

我的 cd 命令有问题。

def cd(a):
    if a == None:
        print('cd')
        print('Change directories')
    else:
        os.chdir(os.getcwd() + '/' + a())

当你让它进入一个没有空格的文件夹时它会起作用,比如当你在提示符中键入 cd Windows 时它会起作用。但是,当您尝试输入其中包含空格的文件夹时,问题就开始了。例如,当我键入 cd Documents Copy 时,它要么进入文件夹 Documents(如果有),要么崩溃。

我该如何解决?我想过将所有调用的函数参数变成一个,但我不知道该怎么做,可能还有其他方法。

您需要更复杂的 split() 函数 -- 请参阅 Split a string by spaces — preserving quoted substrings answer 以了解可能的解决方案。

更新

如果你有一个名为 "the dog" 的子目录,里面有一个 space,在你的解释器中你可以这样做:

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()