这似乎是一个非常基本的问题,但我很难理解它,并会感激任何帮助。
我希望能够致电CheckForJiraIssueRecord
verify_commit_text
。
这是代码:当我运行它时,我得到错误:
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')
答案 0 :(得分:1)
正在调用该函数,但由于以下行而引发异常:
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)
看看它对你有什么用。
答案 1 :(得分:1)
违规行:
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