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

Python 使用cmd模块将参数传递给方法,python,python-2.7,methods,Python,Python 2.7,Methods,我正在尝试使用cmd模块用Python编写自己的shell,即使在阅读了大量的互联网主题后,我也不知道如何解决我的问题 def do_triangle_area(a, h): "Calculating tiangle's field" print (1/2*a)*h 我只想通过启动一个程序并在键入时通过命令行传递“a”和“h”参数 $ tiangle_area 5 2 它应该返回结果,但有一个错误: Traceback (most recent call last): F

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

def do_triangle_area(a, h):
    "Calculating tiangle's field"
    print (1/2*a)*h
我只想通过启动一个程序并在键入时通过命令行传递“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
但它也不起作用:

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)
回溯(最近一次呼叫最后一次):
文件“test8.py”,第75行,在
CMD().cmdloop()
文件“/usr/lib/python2.7/cmd.py”,第142行,在cmdloop中
停止=self.onecmd(行)
onecmd中的文件“/usr/lib/python2.7/cmd.py”,第221行
返回函数(参数)
TypeError:do_triangle_area()正好接受3个参数(给定2个)
一切都在一个类中,cmd模块导入。只要一个论点被证实,一切都没问题,工作得很出色,但它不能为我计算任何东西。但为什么它不能处理来自用户的超过1个参数呢?工作怎么样

在这种情况下我能做什么?请给我任何提示,因为我的头撞到墙上了

编辑:整个代码
EDIT2:粘贴过期-新粘贴:

当您不了解发生了什么时,只需添加跟踪即可

def do_triangle_area(a, h):
        "Calculating tiangle's field"
        print(a, type(a), h, type(h))
        print (1/2*a)*h
会显示出类似于:

24
现在很明显,
do\u triangle\u 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

当您不了解发生了什么时,只需添加跟踪即可

def do_triangle_area(a, h):
        "Calculating tiangle's field"
        print(a, type(a), h, type(h))
        print (1/2*a)*h
会显示出类似于:

24
现在很明显,
do\u triangle\u 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

包括
def onecmd
的代码或解析行的位置[我不知道你要的是什么,所以我把整个代码都包括在内,请,任何人都能帮我吗?你的粘贴箱是无效的python:
do_triangle\u area
接收
a
b
并使用
a
h
。不,这不是问题。这是一个快速粘贴,但这不是重点。我的重点是如何通过两个参数带有cmd模块的ENT?例如,计算三角形面积或简单地添加两个整数?包括
def onecmd
的代码或解析行的位置[我不知道你要的是什么,所以我把整个代码都包括在内,请,任何人都能帮我吗?你的粘贴箱是无效的python:
do_triangle\u area
接收
a
b
并使用
a
h
。不,这不是问题。这是一个快速粘贴,但这不是重点。我的重点是如何通过两个参数带cmd模块的ents?例如,计算三角形面积或简单地添加两个整数?