我在pycharm 2016.3
中定义了如下python文件模板__author__ = ${USER}
__date__ = ${DATE}
__copyright__ = ""
__credits__ = [""]
__license__ = ""
__revision__ = ""
__maintainer__ = ${USER}
__status__ = "Development"
对于修订号我想使用命令的输出" hg id -n"这给了我从mercurial中提取的当前版本号。
最好的方法是什么?
答案 0 :(得分:1)
生成子进程并调用hg以收集输出。我使用this之类的东西。有点缩短,实质上(我希望我没有通过缩短基础来引入错误,但它是py3):
def get_child_output(cmd):
"""
Run a child process, and collect the generated output.
@param cmd: Command to execute.
@type cmd: C{list} of C{str}
@return: Generated output of the command, split on whitespace.
@rtype: C{list} of C{str}
"""
return subprocess.check_output(cmd, universal_newlines = True).split()
def get_hg_version():
path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
version = ''
version_list = get_child_output(['hg', '-R', path, 'id', '-n', '-i'])
hash = version_list[0].rstrip('+')
# Get the date of the commit of the current NML version in days since January 1st 2000
ctimes = get_child_output(["hg", "-R", path, "parent", "--template='{date|hgdate} {date|shortdate}\n'"])
ctime = (int((ctimes[0].split("'"))[1]) - 946684800) // (60 * 60 * 24)
cversion = str(ctime)
# Combine the version string
version = "v{}:{} from {}".format(cversion, hash, ctimes[2].split("'", 1)[0])
return version
# Save the revision in the proper variable
__revision__ = get_hg_version()
最后:考虑不要使用(仅)hg id -n
的输出作为您的版本号:它只是一个特定的repo特定实例的本地值,并且可能会在不同的克隆之间变化很大同样的回购。使用散列和/或提交时间作为版本(以及)。