【发布时间】:2016-11-29 12:23:11
【问题描述】:
我知道已经提出并回答了类似的问题。
但是,我的问题涉及的问题类型和实施略有不同:
情况是:
我需要构建一个 shell 脚本,它将捕获 python (2.7) 脚本的返回值,然后将其用于 jenkins 作业。
在 python 脚本中,我必须读取一个 SVN 签出文本文件并返回文件的值,更新文件的值,然后提交。
我已经实现了以下代码:
swdl_number_receiver.py
import posixpath
import os
import sys
import subprocess
SVN_VERSION_DIR_PATH = 'data'
SWDL_FILE_NAME = "swdl_number.txt"
# Exit codes
class ExitCode:
""" Exit code Enumeration """
SUCCESS = 0
FAILURE = 1
# get SWDL number from the file
def getSWDLNumber():
work_dir = posixpath.join(os.getcwd(),SVN_VERSION_DIR_PATH)
version_number = None
new_version_number = None
# Read the File
os.chdir(work_dir)
with open(SWDL_FILE_NAME, "r") as input_file:
for line in input_file:
version_number = str.strip(line)
if version_number is None:
print "---- SWDL NUmber is empty existing the code ....... "
sys.exit(ExitCode.FAILURE)
else:
print "++++ The found SWDL number is : " + version_number
new_version_number = int(version_number) + 1
print "++++ The New SWDL Number is : " + str(new_version_number)
print "++++ Writing the new SWDL Number from " + str(version_number) + " to " + str(new_version_number)
#replace the file with new content
os.remove(SWDL_FILE_NAME)
with open(SWDL_FILE_NAME, 'wb') as output:
output.write(str(new_version_number).rstrip('\n'))
checkin_message = '"Updated SWDL Number to : ' + str(new_version_number) + '"'
try:
subprocess.call(['svn', 'commit', '-m ' + checkin_message, SWDL_FILE_NAME, '--non-interactive'])
except:
sys.exit(ExitCode.FAILURE)
return new_version_number
if __name__ == "__main__":
print getSWDLNumber()
在我正在做的 shell 脚本中:
outputString=$(python swdl_number_receiver.py)
echo $outputString
swdl_number.txt 只包含一行 5 位数字。
我的问题:
当我注释掉所有“打印”行和 SVN 提交的 try and catch 时,我只得到 new_version_number 作为返回值。
换句话说,如果我取消注释所有带有打印语句的行以及 SVN 提交的 try 和 catch 块,那么在 shell 脚本中作为 $output_string 我得到每个打印语句和提交消息以及“new_version_number” .如果我注释掉所有打印语句并尝试捕获块,那么我会得到所需的“new_version_number”。
应如何修改我的代码以获得唯一需要的“new_version_number”返回并显示所有打印行?
【问题讨论】:
标签: python bash python-2.7 shell