如何从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

下一篇: Problem in calling Python script from PHP