简体   繁体   中英

How to call one function from within another function in python

this may seem like a very basic question, but i have difficulty grasping it, and would appreciate any help.

I want to be able to call CheckForJiraIssueRecord from verify_commit_text .

here is the code: when i run it i get error:

jira ticket regex matched!
printing m.group(1)
QA-65
my_args ...
QA-65
transaction abort!
rollback completed
abort: pretxncommit.jira hook exited with status 1

meaning, that CheckForJiraIssueRecord(my_args) is just not getting called

#!/usr/bin/env python
import re, os, sys, jira, subprocess 
def verify_commit_text(tags):
     for line in tags:
         if re.match('^NO-TIK',line):
             return True
         elif re.match('^NO-REVIEW', line):
             return True
         elif re.match(r'[a-zA-Z]+-\d+', line):
             # Validate the JIRA ID
             print 'jira ticket regex matched!'
             m = re.search("([a-zA-Z]+-\d+)",line)
             print 'printing m.group(1)'
             print m.group(1)
             my_args = m.group(1)
             print 'my_args ...'
             print my_args
             result = CheckForJiraIssueRecord(my_args)
             print 'printing result....'
             print result
             if result == False:
                 #util.warn("%s does not exist"%my_args)
                 print 'result = False.......'
             else:
                 print 'if result == False return True'
                 return True
             return True
         else:
             return False
 def CheckForJiraIssueRecord(object):
     sys.stdout = os.devnull
     sys.stderr = os.devnull

     try:
         com = jira.Commands()
         logger = jira.setupLogging()
         jira_env = {'home':os.environ['HOME']}
         command_cat= "cat"
         command_logout= "logout"
         #my_args = ["QA-656"]
         server = "http://jira.myserver.com:8080/rpc/soap/jirasoapservice-v2?wsdl"
     except Exception, e:
         sys.exit('config error')

 if __name__ == '__main__':
     commit_text_verified = verify_commit_text(os.popen('hg tip --template "{desc}"'))
     #commit_text_verified = verify_commit_text(os.popen('hg log -r $1  --template "{desc}"'))
     if (commit_text_verified):
         sys.exit(0)
     else:
         print >> sys.stderr, ('[obey the rules!]')
         sys.exit(1);

 class Options:
     pass
 options = Options()

 options.user = 'username'
 options.password = 'password'

 try:

     jira.soap = jira.Client(server)
     jira.start_login(options, jira_env, command_cat, com, logger)
     issue = com.run(command_cat, logger, jira_env, my_args)
 except Exception, e:
     print sys.exit('data error')

The function is being called but it's throwing an exception due to the following lines:

32     sys.stdout = os.devnull
33     sys.stderr = os.devnull

You are assigning a string (os.devnull) to a what should be a file handle, so when anyone writes to stdout or stder it will throw an exception due to a type error. You should try:

32     sys.stdout = open(os.devnull)
33     sys.stderr = open(os.devnull)

and see how that works for you.

Offending lines:

sys.stdout = os.devnull
sys.stderr = os.devnull

You must assign sys.stdout to a variable and after the function has done what its supposed to do, change it back. ie

out = sys.stdout
err = sys.stderr
.... Your code
#Just befor function exits
sys.stdout = out
sys.stderr = err

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM