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
链接地址: http://www.djcxy.com/p/9300.html