Я стою перед следующей проблемой.Я создаю небольшой инструмент 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