自我/班级的全球名称?

时间:2010-12-17 18:13:47

标签: python subprocess

我在课堂上调用变量时遇到问题。我把所有东西都设置为自我,但我仍然遇到错误。我想我很难解决这个问题,因为我是3.0脚本的新手。

这是我的剧本:

http://pastebin.com/9Lrw399E

这是错误:

command = 'tcpdump -c5 -tttt -w {0} host {1}'.format(raw, input_host)
NameError: global name 'raw' is not defined

如果我将它们设为self.raw或self.input_host

它得到了这个:

command = 'tcpdump -c5 -tttt -w {0} host {1}'.format(self.raw, self.input_host)
AttributeError: 'MainLoop' object has no attribute 'raw'

2 个答案:

答案 0 :(得分:4)

command = 'tcpdump -c5 -tttt -w {0} host {1}'.format(raw, input_host)

应该是:

command = 'tcpdump -c5 -tttt -w {0} host {1}'.format(self.raw, self.input_host)

注意self

答案 1 :(得分:1)

command = 'tcpdump -c5 -tttt -w {0} host {1}'.format(self.raw, self.input_host)

除非你将raw和input_host作为函数参数传递,否则你需要使用self.variable来查找类实例的变量。

编辑:您还需要确保在运行此代码行之前调用self.raw和self.input_host的任何函数。在您的代码中,如果您致电MainLoop.cmd(),则必须在 MainLoop.host()之前致电MainLoop.inputname()cmd() ,以便self.raw和{{ 1}}存在于类的实例中。

在这种情况下,您应该为您的类创建一个至少创建实例变量

的构造函数
self.input_host

然后在创建命令之前检查self.raw和self.input_host的值。

class MainLoop:
    def __init__(self):
        self.raw = None
        self.input_host = None