如何将所有被调用的函数参数转换为一个(Python 3)

时间:2016-05-11 18:24:57

标签: python function python-3.x arguments simulator

我正在使用Python构建终端模拟器,并且我将命令存储在参数中,例如:

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

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

终端的工作原理如下:

  1. 询问用户输入
  2. 拆分输入
  3. 使用输入的第一部分来搜索本地的函数
  4. 如果有,则使用输入的其余部分作为参数
  5. 调用函数
  6. 我的cd命令有问题。

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

    当你输入一个没有空格的文件夹时就可以了,就像你在提示符下输入cd Windows一样,它可以工作。但是当您尝试输入其中包含空格的文件夹时,问题就会出现。当我输入cd Documents Copy时,它会输入文件夹Documents(如果有的话),或者崩溃。

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

1 个答案:

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