我正在编写一个用于持续集成和测试的python脚本,该脚本将被咬人调用。我们的单元测试使用谷歌测试框架。每个软件组件都有一个运行配置和其他所需服务的bash脚本,并运行gtest可执行文件。 python脚本遍历存储库查找bash脚本,并使用os.popen()命令调用每个脚本。从python调用seg时出错,但从命令行正常运行
Python脚本(UnitTest.py)
#!/usr/bin/python
import os
import fnmatch
import sys
import subprocess
repository_location = '/home/actuv/workspace/eclipse/iccs/'
unit_test_script_name = 'RunUnitTests.sh'
def file_locator(repo, script_name):
# Function for determining all unit test scripts
test_location = []
for root, dirnames, filenames in os.walk(repo):
for filename in fnmatch.filter(filenames, script_name):
test_location.append(os.path.join(root))
return test_location
def run_tests(test_locations, script_name):
# Runs test scripts located at each test location
for tests in test_locations:
cmd = 'cd ' + tests + ';./' + script_name
print 'Running Unit Test at: ' + tests
os.popen(cmd)
################ MAIN ################
# Find Test Locations
script_locations = file_locator(repository_location, unit_test_script_name)
# Run tests located at each location
run_tests(script_locations)
# End of tests
sys.exit(0)
bash脚本
#!/bin/sh
echo "Running unit tests..."
# update the LD_LIBRARY_PATH to include paths to our shared libraries
# start the test server
# Run the tests
# wait to allow all processes to end before terminating the server
sleep 10s
当我从终端窗口手动运行bash脚本,它运行良好。当我使用python脚本调用bash脚本时,我在bash脚本的TestSingleClient和TestMultiClientLA行上出现了分段错误。
我最初有一个问题,它找不到脚本,但我意识到我需要在脚本名称前加'./'。 – Axe
啊,我明白了。编辑... – unutbu
我还发现,当允许管道传输到被咬的控制台时,stdout和stderr会引起重大问题。我打开了一个临时文件(temp = open(temp,'w')),并将stdout = temp和stderr = temp标志添加到Popen调用中。 – Axe