global name not defined

NetKev kevin at netkev.com
Mon May 22 18:26:01 EDT 2006


I added a function 'warn_Admin' and defined it just before another
function 'process_log'.  'process_log' calls this warn_Admin' function.
 However, when it gets called i get the following error every time:
---
Traceback (most recent call last):
  File "/usr/bin/denyhosts.py", line 202, in ?
    first_time, noemail, daemon)
  File "/usr/lib/python2.3/site-packages/DenyHosts/deny_hosts.py", line
86, in __init__
    last_offset)
  File "/usr/lib/python2.3/site-packages/DenyHosts/daemon.py", line 74,
in createDaemon
    apply(func, args)
  File "/usr/lib/python2.3/site-packages/DenyHosts/deny_hosts.py", line
137, in runDaemon
    purge_time, purge_sleep_ratio)
  File "/usr/lib/python2.3/site-packages/DenyHosts/deny_hosts.py", line
178, in daemonLoop
    last_offset = self.process_log(logfile, last_offset)
  File "/usr/lib/python2.3/site-packages/DenyHosts/deny_hosts.py", line
380, in process_log
    [warn_Admin(ip) for ip in new_denied_hosts]
NameError: global name 'warn_Admin' is not defined
--
If I take the two functions out of their current environment and store
them in test file and run it, it doesn't complain.  I'm new  to python
so I'm guessing there is some weird scope rule I am missing.  I did try
'self.warn_Admin(ip)' just to be safe but then I got a 'too many
arguments' error?

I'm lost :)

the added function plus the header of the existing function(its too
large):
------------
 def warn_Admin(warn_ip):
        SENDMAIL = "/usr/sbin/sendmail" # sendmail location
        p = os.popen("%s -t" % SENDMAIL, "w")
        p.write("To: kevin at netkev.com\n")
        p.write("Subject: test from denyhosts\n")
        p.write("\n") # blank line separating headers from body
        p.write("Some text\n")
        p.write(warn_ip)
        sts = p.close()
        if sts != 0:
            info("Sendmail exit status: %s", sts)
        return sts


    def process_log(self, logfile, offset):
-------------

the call to warn_Admin from process_log:
---
        if new_denied_hosts:
            info("new denied hosts: %s", str(new_denied_hosts))
            #[info(ip) for ip in new_denied_hosts]
            [warn_Admin(ip) for ip in new_denied_hosts]
        else:
            debug("no new denied hosts")

-kevin




More information about the Python-list mailing list