LINUX.ORG.RU

Передать переменную из Zenity в Python

 , ,


0

1

Как передать переменную Zenity в Python?

Я делаю так:

import csv
import os
 
str = os.system('zenity --entry --text="Введите код индентификатора"')

with open('bd-ao.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=';')
    for row in reader:
        if row['ID'] == str:
            print(row['Поле1'])
            print(row['Поле2'])
            

Но после запуска скрипта в BASH и заполнения текстового поля: в консоль выводится только значение которое ввел в текстовое поле, а скрипт не срабатывает.

UPD: Еще нюанс. После нажатии кнопки модального окна в консоли отображается предупреждение zenity:14539): Gtk-WARNING **: 15:17:55.603: Theme parsing error: gtk.css:3916:13: Not using units is deprecated Assuming 'px'., которого нет в Google.

Также пробовал передать значение переменной через subprocess как описано здесь: https://qna.habr.com/q/1185040 По факту тоже самое



Последнее исправление: Gnom7 (всего исправлений: 2)

Ответ на: комментарий от xDShot

Скопипастить нужный код

Это Вы про то что модули Python можно устанавливать вручную, а не через pip? Я думал над этим, но почему-то рассудил, что так нельзя делать на офисном ПК, в смысле нет необходимых прав.

Если так можно делать, я лучше бы установил модуль pyqt чем колдовать над Zenity.

Gnom7
() автор топика
Последнее исправление: Gnom7 (всего исправлений: 1)
Ответ на: комментарий от Gnom7

нет необходимых прав. Если так можно делать

А какие права тебе нужны? Файлы создавать и запускать можешь? Так этого достаточно.

python -m venv --help

python -m venv ~/my_python_env
~/my_python_env/bin/pip install pyqt6

~/my_python_env/bin/python my_cool_script.py
anonymous
()
Ответ на: комментарий от peregrine

Ну так не работай, если у тебя нет прав работать. Пинай болт, требуй денег.

На работе работаю с электричеством, если Вы из моего региона, то не стоит благодарности за то что пользуетесь благами цивилизации, в частности Интернетом :-).

Может подскажете как донести до местных спецов, что я им не ровня в понимании кодинга/программирования? Думаю уже на аватарке написать.

Gnom7
() автор топика
Ответ на: комментарий от anonymous

Что тебе непонятно в функции _message?

Мне примерно понятна только строчка

p.stdin.write(str(message) + '\n')

Которая значит, что результат моей строчки

str = os.system('zenity --entry --text="Введите код индентификатора"')

Будет выводится так: СТРОКА+Перевод строки.

Gnom7
() автор топика
Последнее исправление: Gnom7 (всего исправлений: 2)
Ответ на: комментарий от andytux

Ошибка в теме оформления. Назван файл, строка 3916, 13 символ в строке. Неправильно указаны единицы измерения, предлагает ‘px’.

Видимо, действительно, проблема в этом.

Если запускать скрипт с str = os.system('zenity --entry --text="Введите код"') то str возвращает 0.

Если же запускать скрипт с str = subprocess.getoutput('zenity --entry --text="Введите код"') то str возвращает текст ошибки + введенное значение.

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

Ручную установку Python модулей пока отложу, т.к. стало интересно разобраться с zenity.

Gnom7
() автор топика
Ответ на: комментарий от eternal_sorrow

Прошу привести пример кода выводящего только stdout. Для выбора направления изучения, т.к. я запутался в subprocess.* и их параметрах.

Еще появляются смежные модули типа sys.stdout и ухожу в дебри.

Gnom7
() автор топика
Ответ на: комментарий от Gnom7
result = subprocess.run(['/usr/bin/zenity', '--entry', '--text="Введите код"'], stdout=subprocess.PIPE, stderr=None, text=True)
output = result.stdout

Не используй str как имя переменной, потому что это имя строкового типа. И ещё не используй shell=True режим в subprocess, если не уверен что он тебе абсолютно необходим. getoutput и ей подобные функции используют shell=True внутри. Это ничем не лучше чем os.system.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 4)
Ответ на: комментарий от Gnom7

почитай уже про язык который используешь. Берёшь модуль, копируешь в директорию с исходником, импортишь, всё норм. Если там сишный интероп, то сложнее, придётся собирать wheel, но тоже ничего сверхъестественного.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Gnom7

О это из-за вас у меня свет каждый месяц вырубается в Подмосковье и я уже 8 лет вынужден был купить бензогенератор, т.к. чинится свет зачастую сутки что зимой в мороз -30 при отоплении с мотором качающим воду приводит к отрицательной температуре в жилых помещениях? Буду знать кого теперь ругать на ЛОР-е )

peregrine ★★★★★
()