Разбор командной строки Windows через Python в Linux

У меня есть куча строк командной строки Windows, как это:

"C:\test\my dir\myapp.exe" -somearg=1 -anotherarg="teststr" -thirdarg

Мои скрипты на Python работают в Ubuntu и должны анализировать эти строки. Мне нужно получить путь к исполняемому файлу и все аргументы в форме dict. Какой самый простой способ сделать это?

Я пытался использовать python`s argparse, но не могу понять, как правильно его настроить (если это вообще возможно).

2 ответа

Очень наивная реализация этого была бы:

STRINGS = [
    '"C:\test\my dir\myapp.exe" -somearg=1 -anotherarg="teststr" -thirdarg'
]


def _parse(string):
    parsed = {}

    string_parts = string.split(' -')
    parsed['path'] = string_parts[0]
    del string_parts[0]

    for arg in string_parts:
        kv = arg.split('=')
        parsed[kv[0]] = None if len(kv) < 2 else kv[1]
    return parsed


def main():
    parsed_strings = []
    for string in STRINGS:
        parsed_strings.append(_parse(string))

    print(parsed_strings)


main()

# [{'path': '"C:\test\\my dir\\myapp.exe"', 'somearg': '1', 'anotherarg': '"teststr"', 'thirdarg': None}]

Предполагая, что есть более сложные строки с различными вариациями пробелов и тире, регулярные выражения могут подойти лучше.

Если вы знаете, что это путь Windows, используйте PureWindowsPathдля изящной обработки путей Windows в Unix:

      from pathlib import PureWindowsPath
string = 'C:\test\mydir\myapp.exe somearg'
fn = string.strip().split(" ")[0]
path = PureWindowsPath(fn)
path
> PureWindowsPath('C:\test/mydir/myapp.exe')
Другие вопросы по тегам