pytest-dev/pytest-testinfra

Incompatible arg quoting in windows

Open

#375 ouverte le 17 sept. 2018

Voir sur GitHub
 (0 commentaires) (2 réactions) (0 assignés)Python (318 forks)batch import
help wantedwindows

Métriques du dépôt

Stars
 (2 156 stars)
Métriques de merge PR
 (Merge moyen 87j 19h) (6 PRs mergées en 30 j)

Description

When running command with 1+ arguments against a docker host, the command automatically fails with line 1: syntax error: unterminated quoted string. The is because the quote method in backend/base.py is using pipes.quote (which is only compatible with posix systems) to generate quotes, and sometimes uses single quotes to enclose an arg. The default shell in windows is cmd, which does not accept single quoted args (only double quoted). On windows, a more accurate command would be something like this:

@staticmethod
def quote(command, *args):
    def anon_1(arg):
        if re.match(r'/("|\s|\')', arg) != None:
            return arg

        arg = re.sub('"', '\"', arg)
        return '"%s"' % (arg)

    if args:
        return command % tuple(anon_1(a) for a in args)
        # return command % tuple(pipes.quote(a) for a in args)
    return command

Guide contributeur