New issue 257: Shell commands fail on WIndows due to popen shell=False in Action._popen https://bitbucket.org/hpk42/tox/issue/257/shell-commands-fail-on-windows-due-to
stefano-m: Hello, I am using tox 2.0.2 and Python 2.7 on Windows 7. As part of my tox tests, I need to run gulp and other npm-related commands. To do so, I first run npm install and then e.g. run gulp that has been installed in the node_modules directory. The relevant part of my tox.ini looks like [testenv] whitelist_externals = npm commands = npm install {toxinidir}/node_modules/.bin/gulp When I run tox, I get the following error when gulp is run: py27-win32 runtests: commands[0] | npm install py27-win32 runtests: commands[1] | F:\my_project\my_project/node_modules/.bin/gulp ERROR: invocation failed (errno 8), args: ['F:\\my_project\\my_project/node_modules/.bin/gulp'], cwd: F:\my_project\my_project Traceback (most recent call last): File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "C:\Python27\lib\runpy.py", line 72, in _run_code exec code in run_globals File "C:\Python27\Scripts\tox.exe\__main__.py", line 9, in <module> File "C:\Python27\lib\site-packages\tox\session.py", line 39, in main retcode = Session(config).runcommand() File "C:\Python27\lib\site-packages\tox\session.py", line 367, in runcommand return self.subcommand_test() File "C:\Python27\lib\site-packages\tox\session.py", line 540, in subcommand_test self.runtestenv(venv) File "C:\Python27\lib\site-packages\tox\session.py", line 548, in runtestenv venv.test(redirect=redirect) File "C:\Python27\lib\site-packages\tox\venv.py", line 360, in test ignore_ret=ignore_ret) File "C:\Python27\lib\site-packages\tox\venv.py", line 384, in _pcall return action.popen(args, cwd=cwd, env=env, redirect=redirect, ignore_ret=ignore_ret) File "C:\Python27\lib\site-packages\tox\session.py", line 130, in popen stdout=stdout, stderr=STDOUT) File "C:\Python27\lib\site-packages\tox\session.py", line 218, in _popen stdout=stdout, stderr=stderr, env=env) File "C:\Python27\lib\subprocess.py", line 710, in __init__ errread, errwrite) File "C:\Python27\lib\subprocess.py", line 958, in _execute_child startupinfo) WindowsError: [Error 193] %1 is not a valid Win32 application The same configuration works OK on Linux. I think that the problem lies in `Action._popen` in the `session.py` module, where `self.session.popen` is called (line 216). popen is run with the `shell` keyword argument set to `False`, and causes the command to fall over on Windows. Since I had already noticed that problem (on Windows only) in other places where I use `subprocess`, I tried to change the value to `True` by doing return self.session.popen(args, shell=(sys.platform == 'win32'), cwd=str(cwd), universal_newlines=True, stdout=stdout, stderr=stderr, env=env) and that solved the issue (while keeping the default value to `False` on non-Windows platforms). _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit