Reproducible for both Python 3.6 and 3.7. I did not test against older versions.
Tested on the Click 6.x series. Windows 10, Build 17134.
Steps to reproduce:
# t.py
import click
@click.command()
def main():
click.echo('run')
if __name__ == '__main__':
main()
> python t.py
run
> python t.py >NUL
Traceback (most recent call last):
File "t.py", line 10, in <module>
main()
File ".venv\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File ".venv\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File ".venv\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File ".venv\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "t.py", line 6, in main
click.echo('run')
File ".venv\lib\site-packages\click\utils.py", line 259, in echo
file.write(message)
File ".venv\lib\site-packages\click\_winconsole.py", line 180, in write
return self._text_stream.write(x)
File ".venv\lib\site-packages\click\_winconsole.py", line 164, in write
raise OSError(self._get_error_message(GetLastError()))
OSError: Windows error 1
I believe the problem is that Click tries to be helpful, and raises an error when there are not bytes written when there should be. This is, however, exactly what is expected to happen when you redirect things to NUL on Windows.
Curiously, however, Windows seems to act a little differently for stderr. 2>NUL works as expected.
Reproducible for both Python 3.6 and 3.7. I did not test against older versions.
Tested on the Click 6.x series. Windows 10, Build 17134.
Steps to reproduce:
I believe the problem is that Click tries to be helpful, and raises an error when there are not bytes written when there should be. This is, however, exactly what is expected to happen when you redirect things to
NULon Windows.Curiously, however, Windows seems to act a little differently for stderr.
2>NULworks as expected.