2017-02-21 90 views
0

我试图在使用cmd模块的Python中编写我自己的shell,即使在读取了互联网中的主题hundreads之后,我也不知道如何解决我的问题。将参数传递给使用cmd模块的方法

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

我只是想通过启动程序,并通过“一”和“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 

但它不是工作压力太大:

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) 
TypeError: do_triangle_area() takes exactly 3 arguments (2 given) 

一切都在一个班,CMD模块导入。这是一切都好,当它是一个参数 - 检查,工作辉煌,但它不能为我计算任何东西。但为什么它不能处理来自用户的超过1个参数?它是如何工作的?

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

编辑:全码http://pastebin.com/3EVBbvfN EDIT2:粘贴过期 - 新贴:http://pastebin.com/3wM021s1

+0

包括'高清onecmd'或您解析线 – TemporalWolf

+0

[http://pastebin.com/3EVBbvfN]我不知道你要问什么,于是我的代码包括整个代码 –

+0

请任何人都可以帮助我? –

回答

0

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

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的对象作为自我和包含指令的剩余部分的单个字符串。所以,你必须写:

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