繁体   English   中英

如何在python中从另一个函数中调用一个函数

[英]How to call one function from within another function in 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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