使用cmd modu向方法传递参数

2024-09-28 13:14:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

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

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模块导入。当它是一个论点的时候,一切都很好-检查,工作很出色,但它不能为我计算任何东西。但为什么它不能处理来自用户的一个以上的参数呢?怎么样了?在

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

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


Tags: inpyselfcmdlibusrlinearea
1条回答
网友
1楼 · 发布于 2024-09-28 13:14:40

当你不明白发生了什么,就加上痕迹。在

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

会表现出类似于:

^{pr2}$

现在很明显,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

相关问题 更多 >

    热门问题