pytest-docker icon indicating copy to clipboard operation
pytest-docker copied to clipboard

Insufficient removal of control characters on windows with cmd.exe as shell

Open mf01 opened this issue 3 years ago • 2 comments

Affected Line https://github.com/avast/pytest-docker/blob/567fa091a0d8ccf4ac2e8897c1ccecf08774125c/src/pytest_docker/plugin.py#L79 endpoint = output.strip().decode("utf-8") Affected Version: at least since 0.10.3

I use PyCharm on Windows 10 to debug my pytest test cases. Starting the conatiners the above line is executed to to resolve a port for a service.

output = self._docker_compose.execute("port %s %d" % (service, container_port)) results to b'0.0.0.0:12347\r\n\x1b[0m'. No control character is removed. Hence, output.strip().decode("utf-8") result to s string including the control characters.

Some lines later (L86) if len(endpoint.split("\n")) > 1: does not support windows line endings.

On Linux or Git Bash for Windows, there is no problem.

My fix for that. Please check this solution:

endpoint = endpoint.replace("\r",'') # add support for windows line ending
if len(endpoint.split("\n")) > 1:
      endpoint = endpoint.split("\n")[-1] # index -1 is also wrong for me because it results to '\x1b[0m'. Maybe use 0 or -2

mf01 avatar Jul 12 '22 09:07 mf01

I can confirm this issue. I faced a similar problem in setting up and almost gave up on it. Any suggestions for a fix? I can do the grunt work to make the merge request.

wickywaka avatar Sep 17 '22 19:09 wickywaka

For those who come here to find a solution for this problem, here is a related merge request: https://github.com/avast/pytest-docker/pull/81

wickywaka avatar Sep 17 '22 19:09 wickywaka