| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #
- # File : win32spawn.py
- # This file is part of RT-Thread RTOS
- # COPYRIGHT (C) 2006 - 2025, RT-Thread Development Team
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License along
- # with this program; if not, write to the Free Software Foundation, Inc.,
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- #
- # Change Logs:
- # Date Author Notes
- # 2015-01-20 Bernard Add copyright information
- #
- import os
- import subprocess
- class Win32Spawn:
- def spawn(self, sh, escape, cmd, args, env):
- # deal with the cmd build-in commands which cannot be used in
- # subprocess.Popen
- if cmd == 'del':
- for f in args[1:]:
- try:
- os.remove(f)
- except Exception as e:
- print('Error removing file: ' + e)
- return -1
- return 0
- newargs = ' '.join(args[1:])
- cmdline = cmd + " " + newargs
- # Make sure the env is constructed by strings
- _e = dict([(k, str(v)) for k, v in env.items()])
- # Windows(tm) CreateProcess does not use the env passed to it to find
- # the executables. So we have to modify our own PATH to make Popen
- # work.
- old_path = os.environ['PATH']
- os.environ['PATH'] = _e['PATH']
- try:
- proc = subprocess.Popen(cmdline, env=_e, shell=False)
- except Exception as e:
- print('Error in calling command:' + cmdline.split(' ')[0])
- print('Exception: ' + os.strerror(e.errno))
- if (os.strerror(e.errno) == "No such file or directory"):
- print ("\nPlease check Toolchains PATH setting.\n")
- return e.errno
- finally:
- os.environ['PATH'] = old_path
- return proc.wait()
|