[CMake] Calling a Python Testing Script from CMake/CTest

Matthew Keeler mkeeler at tenable.com
Wed Feb 24 09:50:53 EST 2016


My guess is that the command prompt is seeing the .py extension and automatically invoking the python interpreter for you. On other platforms it looks for the #!/usr/bin/env python which won’t work on windows.What you should do is use the FindPythonInterp cmake module to find your python executable and specify the interpreter to execute in your add test line. https://cmake.org/cmake/help/v3.3/module/FindPythonInterp.html

Something like the following should work (I have not tested so the syntax might need some slight tweaks).

include(FindPythonInterp)
add_test(NAME sample_test COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/sample_test.py WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} )

-- 
Matthew Keeler
On February 24, 2016 at 09:15:10, George Ryan (george.ryan at geospectrum.ca) wrote:

Hi,  

I am having difficulty getting a python script to run a C++ subprocess  
on Window 7 using VS2013. On Linux, the following code works fine, but  
on Windows, from the command line I get the following output:  

Microsoft (R) Program Maintenance Utility Version 12.00.21005.1  
Copyright (C) Microsoft Corporation. All rights reserved.  

Running tests...  
Test project C:/work/s/sandbox/ctestpy/b  
Start 1: sample_test  
1/1 Test #1: sample_test ......................***Not Run 0.00 sec  

0% tests passed, 1 tests failed out of 1  

Total Test time (real) = 0.06 sec  

The following tests FAILED:  
1 - sample_test (BAD_COMMAND)  
Errors while running CTest  
NMAKE : fatal error U1077: 'echo' : return code '0x8'  
Stop.  

No matter what options I supply to ctest, I can't seem to get any  
additional insight. I am assuming that for some reason the  
WORKING_DIRECTORY isn't being obeyed on Windows?  

If I run the python script manually from the command prompt, it works  
fine. The python executable is in my $PATH.On Linux I am using CMake  
3.3.1, and on Windows I have CMake 3.2.3.  

----  

sample.cpp  

int main()  
{  
return 0;  
}  

--------------  

sample_test.py  

#!/usr/bin/env python  
import sys  
import subprocess  

sample = subprocess.Popen("./sample")  
sample.wait()  
if sample.returncode != 0:  
sys.exit(1)  
else:  
sys.exit(0)  
~  
------------------------  

CMakeLists.txt  

cmake_minimum_required(VERSION 3.0)  
project(sampleprg)  

enable_testing()  

add_executable( sample sample.cpp )  

add_test(NAME sample_test  
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/sample_test.py  
WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} )  




--  

Powered by www.kitware.com  

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ  

Kitware offers various services to support the CMake community. For more information on each offering, please visit:  

CMake Support: http://cmake.org/cmake/help/support.html  
CMake Consulting: http://cmake.org/cmake/help/consulting.html  
CMake Training Courses: http://cmake.org/cmake/help/training.html  

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html  

Follow this link to subscribe/unsubscribe:  
http://public.kitware.com/mailman/listinfo/cmake  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160224/d70f6e50/attachment.html>


More information about the CMake mailing list