使用cmd模块将参数传递给方法

时间:2017-02-21 00:02:20

标签: python python-2.7 methods

我正在尝试使用cmd模块在Python中编写自己的shell,即使在互联网上阅读了一些主题,我也不知道如何解决我的问题。

./nanotekspice resources/basics/test.nts c=1 --mode=ncurses

我只是想通过启动一个程序并在我输入时通过命令行传递“a”和“h”参数

def do_triangle_area(a, h):
    "Calculating tiangle's field"
    print (1/2*a)*h

它应该返回结果,但是有一个错误:

$ tiangle_area 5 2

我试图添加一个自我论证

Traceback (most recent call last):
  File "test8.py", line 75, in <module>
    CMD().cmdloop()
  File "/usr/lib/python2.7/cmd.py", line 142, in cmdloop
    stop = self.onecmd(line)
  File "/usr/lib/python2.7/cmd.py", line 221, in onecmd
    return func(arg)
  File "test8.py", line 17, in do_triangle_area
    print (a*b)
TypeError: object cannot be interpreted as an index

但它也不起作用:

def do_triangle_area(self, a, h):
        "Calculating tiangle's field"
        print (1/2*a)*h

所有内容都在一个类中,导入了cmd模块。当它是一个参数时,一切都没问题 - 检查,工作辉煌,但它无法为我计算任何东西。但为什么它不能处理来自用户的超过1个参数?它是如何工作的?

在这种情况下我该怎么办?请给我任何提示,因为我正在撞到墙上......

编辑:整个代码http://pastebin.com/3EVBbvfN EDIT2:粘贴已过期 - 新粘贴:http://pastebin.com/3wM021s1

1 个答案:

答案 0 :(得分:1)

当你不明白发生了什么时,只需添加痕迹。

def do_triangle_area(a, h):
        "Calculating tiangle's field"
        print(a, type(a), h, type(h))
        print (1/2*a)*h

会显示如下内容:

<__main__.CMD object at 0x...> <class '__main__.CMD'> 2 4 <class 'str'>

现在很明显do_triangle_area接收2个参数,Cmd对象为self,单个字符串包含命令的其余部分。所以你必须写:

def do_triangle(self, line):
    "Calculating tiangle's field"
    # print(self, type(self), line, type(line)) uncomment for debug
    a,h = [float(s) for s in line.split()]
    print (1/2*a)*h