如何从python的另一个函数中调用一个函数
这可能看起来像一个非常基本的问题,但我很难理解它,并希望得到任何帮助。
我希望能够从verify_commit_text
调用CheckForJiraIssueRecord
。
这里是代码:当我运行它我得到错误:
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
这意味着,CheckForJiraIssueRecord(my_args)只是没有被调用
#!/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')
函数被调用,但由于以下几行引发异常:
32 sys.stdout = os.devnull
33 sys.stderr = os.devnull
你正在给一个应该是文件句柄的字符串(os.devnull)赋值,所以当任何人写入stdout或stder时,由于类型错误它会抛出一个异常。 你应该试试:
32 sys.stdout = open(os.devnull)
33 sys.stderr = open(os.devnull)
并看看它是如何为你工作的。
违规行数:
sys.stdout = os.devnull
sys.stderr = os.devnull
您必须将sys.stdout分配给一个变量,并且在函数完成其应该执行的操作后,将其更改回去。 即
out = sys.stdout
err = sys.stderr
.... Your code
#Just befor function exits
sys.stdout = out
sys.stderr = err
链接地址: http://www.djcxy.com/p/9299.html
上一篇: How to call one function from within another function in python