testrunner.py
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:3k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. #!/usr/bin/python
  2. """
  3. @file   testrunner.py
  4. @author Nat Goodspeed
  5. @date   2009-03-20
  6. @brief  Utilities for writing wrapper scripts for ADD_COMM_BUILD_TEST unit tests
  7. $LicenseInfo:firstyear=2009&license=viewergpl$
  8. Copyright (c) 2009-2010, Linden Research, Inc.
  9. Second Life Viewer Source Code
  10. The source code in this file ("Source Code") is provided by Linden Lab
  11. to you under the terms of the GNU General Public License, version 2.0
  12. ("GPL"), unless you have obtained a separate licensing agreement
  13. ("Other License"), formally executed by you and Linden Lab.  Terms of
  14. the GPL can be found in doc/GPL-license.txt in this distribution, or
  15. online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16. There are special exceptions to the terms and conditions of the GPL as
  17. it is applied to this Source Code. View the full text of the exception
  18. in the file doc/FLOSS-exception.txt in this software distribution, or
  19. online at
  20. http://secondlifegrid.net/programs/open_source/licensing/flossexception
  21. By copying, modifying or distributing this software, you acknowledge
  22. that you have read and understood your obligations described above,
  23. and agree to abide by those obligations.
  24. ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  25. WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  26. COMPLETENESS OR PERFORMANCE.
  27. $/LicenseInfo$
  28. """
  29. import os
  30. import sys
  31. def debug(*args):
  32.     sys.stdout.writelines(args)
  33.     sys.stdout.flush()
  34. # comment out the line below to enable debug output
  35. debug = lambda *args: None
  36. def run(*args, **kwds):
  37.     """All positional arguments collectively form a command line, executed as
  38.     a synchronous child process.
  39.     In addition, pass server=new_thread_instance as an explicit keyword (to
  40.     differentiate it from an additional command-line argument).
  41.     new_thread_instance should be an instantiated but not yet started Thread
  42.     subclass instance, e.g.:
  43.     run("python", "-c", 'print "Hello, world!"', server=TestHTTPServer(name="httpd"))
  44.     """
  45.     # If there's no server= keyword arg, don't start a server thread: simply
  46.     # run a child process.
  47.     try:
  48.         thread = kwds.pop("server")
  49.     except KeyError:
  50.         pass
  51.     else:
  52.         # Start server thread. Note that this and all other comm server
  53.         # threads should be daemon threads: we'll let them run "forever,"
  54.         # confident that the whole process will terminate when the main thread
  55.         # terminates, which will be when the child process terminates.
  56.         thread.setDaemon(True)
  57.         thread.start()
  58.     # choice of os.spawnv():
  59.     # - [v vs. l] pass a list of args vs. individual arguments,
  60.     # - [no p] don't use the PATH because we specifically want to invoke the
  61.     #   executable passed as our first arg,
  62.     # - [no e] child should inherit this process's environment.
  63.     debug("Running %s...n" % (" ".join(args)))
  64.     sys.stdout.flush()
  65.     rc = os.spawnv(os.P_WAIT, args[0], args)
  66.     debug("%s returned %sn" % (args[0], rc))
  67.     return rc