Python3 Использование переменных из Python в операторе os.popen () (WINDOWS) - PullRequest
0 голосов
/ 27 февраля 2019

Я стою перед следующей проблемой.Я создаю небольшой инструмент Java для удаления с python3.

Я могу прочитать все, что мне нужно, но когда я пытаюсь отправить команду удаления в Windows, я не могу выполнить синтаксический анализ правильно.

Команда для поиска установленного программного обеспечения выглядит следующим образом:

wmic_output = os.popen('''wmic product where "name like 'Java 8 Update %%'" get name''').read()

Без каких-либо переменных в строке os.popen все работает нормально.Попытка выполнить команду кажется более сложной ...

    productname = str(uninstallcall[inx])
    # Check if Version is installed, if so uninstall
    wmic_output1 = os.popen('''wmic product where "name like '%s'" get name''').read()
    result1 = parse_wmic_output(wmic_output1 % (productname))

И да, переменная productname печатается нормально при этом: /

Для синтаксического анализа Im с использованием следующего фрагмента, найденного здесь http://autosqa.com/2016/03/18/how-to-parse-wmic-output-with-python/:

def parse_wmic_output(text):
    result = []
    # remove empty lines
    lines = [s for s in text.splitlines() if s.strip()]
    # No Instance(s) Available
    if len(lines) == 0:
        return result
    header_line = lines[0]
    # Find headers and their positions
    headers = re.findall('\S+\s+|\S$', header_line)
    pos = [0]
    for header in headers:
        pos.append(pos[-1] + len(header))
    for i in range(len(headers)):
        headers[i] = headers[i].strip()
    # Parse each entries
    for r in range(1, len(lines)):
        row = {}
        for i in range(len(pos)-1):
            row[headers[i]] = lines[r][pos[i]:pos[i+1]].strip()
        result.append(row)
    return result

1 Ответ

0 голосов
/ 27 февраля 2019

%s, вы пытаетесь вставить переменную в эту позицию?если это так, вам нужно сделать "some %s variable" % variable_to_inser.Или более чистым способом, выполните f"some {productname} here" (f важно в начале строки).- @ Torxed

Это решает мою проблему следующим образом:

wmic_output = os.popen(f'''wmic product where "name like {variablename}" get name''').read()
...