0 / 0 / 0
Регистрация: 27.04.2019
Сообщений: 2

Парсинг командной строки

27.04.2019, 17:07. Показов 2893. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая:
При поступлении на вход из командной строки выражения:
1. --key <key> --val <value> записывать в словарь значения по ключу
2. --key <key> выводить через запятую значения по ключу
3. иначе выводить None

Python
1
2
3
4
5
6
7
8
if (key != None and key in key_value and value == None):
    print(*key_value[key], sep= ', ')
 
elif  (key != None and value != None):
    key_value[key].append(value)
 
else:
    print("None")
Работа кода при выполнении команды из Cmd следующая:

python file_example.py --key one

Фактический результат:
В словарь по ключу one будет записано значение None, при том что в переменных записаны значения: key: one value: None

Ожидаемый результат:
В словаре уже есть ключ one и у него есть несколько значений и ожидается, что программа пойдет по данной ветке:
Python
1
2
if (key != None and key in key_value and value == None):
    print(*key_value[key], sep= ', ')
Из-за чего может возникнуть данная проблема?
Миниатюры
Парсинг командной строки   Парсинг командной строки  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2019, 17:07
Ответы с готовыми решениями:

Парсинг командной строки.
Решил подтянуть знания по асму и написать небольшой проектик на нем. Для реализации онного мне нужно парсить командную строку и...

Парсинг командной строки
Здравствуйте, уважаемые форумчане! Помогите мне пожалуйста решить проблему. Есть ком строка которая имеет синтаксис: ...

Парсинг сторонней командной строки
Нужно получить текст из другой командной строки, запускаю ее с помощью System.Diagnostics.Process.Start(&quot;qwerty.exe&quot;); ...

3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
27.04.2019, 17:26
Как вы считываете значения из cmdline?

P.S. Используйте argparse и не изобретайте велосипедов. Все уже сделано за вас.
0
0 / 0 / 0
Регистрация: 27.04.2019
Сообщений: 2
27.04.2019, 19:08  [ТС]
С помощью argparse и считываю
Но вопрос не в считывании значений, а в том, почему при значение True логическое выражение не выполняется.
Ниже весь текст программы

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import os
import tempfile
import json
import argparse
from pathlib import Path
 
 
 
 
#storage_path = os.path.join(tempfile.gettempdir(), 'storage.data')
 
storage_path = 'storage.data'
if os.path.exists(storage_path):
    with open(storage_path, "r") as f:
        key_value = json.load(f)
else:
    with open(storage_path, "w") as f:
        key_value = {}
        f.write(json.dumps(key_value))
 
parser = argparse.ArgumentParser()
parser.add_argument("--key","-k", type = str, help ="parameters --key. type - str")
parser.add_argument("--val","-v", type = str, help ="parameters --val. type - str")
 
 
args= parser.parse_args()
 
        
key = str(args.key)
value = str(args.val)
 
key_value.setdefault(key, [value])
 
 
if (key != None and key in key_value and value == None):
    print(*key_value[key], sep= ', ')
 
elif  (key != None and value != None):
    print('key: ',key, ' value: ', value)
    key_value[key].append(value)
 
elif (key == None and value == None):
    print("None")
else:
    print("None")
 
 
 
 
with open(storage_path, 'w') as f:
    f.write(json.dumps(key_value))
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
27.04.2019, 21:21
Лучший ответ Сообщение было отмечено Rombag как решение

Решение

Преобразовывайте сразу в словарь.
Python
1
args = vars(parser.parse_args())
Что касается ваших проверок - они немного странные и напрягать мозг над ними желания нет.
P.S. В Python не принято сравнивать значение переменной с None через оператор равенства == - принято использовать оператор is.

Добавлено через 27 минут
Цитата Сообщение от Rombag Посмотреть сообщение
key = str(args.key)
value = str(args.val)
Вот ваша ошибка. Вы зачем-то преобразовываете все в строку.
Поэтому сравнения и не работают.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2019, 21:21
Помогаю со студенческими работами здесь

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

Парсинг значений из командной строки
Всем доброго времени суток, столкнулся с необходимостью получения значений из командной строки, не просто чисел, а разделенных '/'. ...

Парсинг команд к командной строке
Подскажите, что такое парсинг команд?

Проверка наличия параметра в командной строке // Проверка аргументов командной строки на наличие
Всем доброго времени суток. Возникла необходимость сделать небольшую защиту клиента, на проверку наличия параметра в CMD, если он есть...

Парсинг JSON ответа. Парсинг строки с массивами
public class LocationData { public double Center { get; set; } } public class Field : IField ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru