簡體   English   中英

我如何在python的stderr語句中打印列表內容

[英]How can i print a list contents in a stderr statement in python

這是場景:

我希望能夠打印C Style語句:

print >> sys.stderr, ("%s does not exist"%m_args)

在函數內部或在__main__

但我得到異常:

print >> sys.stderr, ("%m_args[1] does not exist"%m_args[1])
IndexError: list index out of range

碼:


#!/usr/bin/env python

import re, os, sys, jira, subprocess
from optparse import OptionParser
import warnings
from collections import namedtuple

global m_args

def verify_commit_text(tags):
    for line in tags:
        if re.match(r'[^\NO-TIK]',line):
            return False
        elif re.match(r'[^\NO-REVIEW]', line):
            return False
        elif re.match(r'[a-zA-Z]+-\d+', line):
            # Validate the JIRA ID
            m = re.search("([a-zA-Z]+-\d+)",line)
            m_args = m.group(1)
            m_args = [m_args]
            print 'm_args'
            print m_args
            print type(m_args)
            if CheckForJiraIssueRecord(m_args):
                return False
            else:
                #warnings.warn("%s does not exist"%m_args)
                print >> sys.stderr, ("%s does not exist"%m_args)
                return True
        else:
            return True

def CheckForJiraIssueRecord(my_args):
    # turn off stdout
    #sys.stdout = open(os.devnull)
    #sys.stderr = open(os.devnull)
    com = jira.Commands()
    logger = jira.setupLogging()
    jira_env = {'home':os.environ['HOME']}
    command_name = "cat"
    server = "http://jira.server.com:8080/rpc/soap/jirasoapservice-v2?wsdl"
    options = namedtuple('Options', 'user password')('user','password')
    jira.soap = jira.Client(server)
    jira.start_login(options, jira_env, command_name, com, logger)
    issue = com.run(command_name, logger, jira_env, my_args)
    if issue:
        return True

if __name__ == '__main__':
    commit_text_verified = verify_commit_text(os.popen('hg tip --template "{desc}"'))
    if commit_text_verified:
        sys.exit(1)
    else:
        print >> sys.stderr, ('[obey the rules!]')
        print >> sys.stderr, ("%s does not exist"%m_args[0])
        sys.exit(0)

看這行:

print >> sys.stderr, ("%s does not exist"%m_args)

來自verify_commit_text()函數。

現在,查看導致__main__錯誤的行:

print >> sys.stderr, ("%m_args[0] does not exist"%m_args[0])

您需要用%s替換字符串中的%m_args[0]

另外,您使用的是兩個不同的m_args -您嘗試從全局的m_args print ,而您在verify_commit_text()verify_commit_text()了本地版本。 global m_args添加到verify_commit_text()的頂部以消除索引錯誤(對於您的最后一個elif regex匹配的情況,對於遇到else子句的情況,您仍然會得到它。)

您似乎還有其他問題。 您在verify_commit_text()有一個for循環,但是您只進入了第一次迭代,因為所有if分支都return

您還將sys.stderr發送到os.devnull ,因此即使print工作也看不到任何內容。

另外,您的退出條件錯誤。 如果失敗,則返回True ,然后如果結果為True則使用exit(0) - if not commit_text_verified:if not commit_text_verified:其更改為if not commit_text_verified:

還有一件事: CheckForJiraIssueRecord(m_args)沒有return因此它總是返回None ,因此它所處的if條件永遠不會為True -您將始終轉到else

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM