Перейти к содержанию
    

Передача параметров в питоновский скрипт

Я могу сделать так

python3 my_script.py 'aaa' 123 'bbb'
  

и в самом скрипте

if len(sys.argv) < 5:
    print("Missing arguments")
    exit(1)
else:
    command = sys.argv[1]
    loc_ip = sys.argv[2]
    send_ip = sys.argv[3]
    port = int(sys.argv[4])
    

но по сути я могу распарсить или строку или цифру. а если я хочу передать указатель на массив? или структуру в качестве аргумента? такое возможно?

 

уточню вопрос. я запускаю скрипт из среды Qt

QString PROC_Run(QString proc_name, QStringList proc_args)
{
    QProcess proc;
    QString out;

    proc.start(proc_name, proc_args);
    proc.waitForFinished(-1);
    out = proc.readAll();

    return out;
}

Можно сделать что передаваемая структура будет общим объектом между Qt и Python?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, jenya7 said:

но по сути я могу распарсить или строку или цифру. а если я хочу передать указатель на массив? или структуру в качестве аргумента? такое возможно?

Ваша программа на Qt и скрипт это два разных процесса, у каждого своё адресное пространство и другому процессу оно (без грязных хаков) недоступно.

https://doc.qt.io/qt-6/qprocess.html

Есть доступ к stdin, stdout, stderr запущенного процесса. Ну и другие средства межпроцессной коммуникации (IPC) по вкусу.

7 hours ago, jenya7 said:

Можно сделать что передаваемая структура будет общим объектом между Qt и Python?

Если очень хочется.

Можно встроить интерпретатор питона в свою программу и/или из питона вызывать функции написанные на С/С++.

https://docs.python.org/3/extending/index.html

https://docs.python.org/3/extending/embedding.html

Но этим стоит заниматься только если иначе никак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/18/2022 at 4:08 PM, SSerge said:

Можно встроить интерпретатор питона в свою программу и/или из питона вызывать функции написанные на С/С++.

https://docs.python.org/3/extending/index.html

https://docs.python.org/3/extending/embedding.html

Но этим стоит заниматься только если иначе никак.

спасибо. это стоит изучить. скрипт как скрипт меня устраивает, мне бы только передавать объекты в него созданные в  Qt.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть подход через shared memory (в линуксе пользовался, но наверно и в винде какой-то аналог есть)

но если в С немного повозившись с файлами и ioctl получаешь указатель памяти, с которым вобщем-то много чего можно делать

то как с этим быть в питоне (где нет указателей, а mmap есть) - я не знаю.

но, в любом случае - "быстрые файлы", которые передаются через общую память в питоне, могут помочь

-------------

а совсем просто - в линуксе есть фифо|pipe

mkfifo имя 

это для именованой.

соответственно в него один процесс пишет, другой читает (просто как в файл с именем)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, jenya7 said:

но по сути я могу распарсить или строку или цифру. а если я хочу передать указатель на массив? или структуру в качестве аргумента? такое возможно?

Нет, но вы можете сериализовать структуру или массив в JSON, и передать его в качестве текстового параметра. Со стороны Python сделать обратную операцию. И Qt и Python прекрасно понимают JSON

51 minutes ago, jenya7 said:

мне бы только передавать объекты в него созданные в  Qt.

Именно объекты невозможно вообще. А чем вас не устраивает родной JavaScript (вместо Python), который от рождения есть в Qt? Тем более, что в отличие от Python он быстрее, потому что он JIT.

И объекты от Qt туда встраиваются автоматом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/18/2022 at 5:17 PM, xvr said:

Нет, но вы можете сериализовать структуру или массив в JSON, и передать его в качестве текстового параметра. Со стороны Python сделать обратную операцию. И Qt и Python прекрасно понимают JSON

Именно объекты невозможно вообще. А чем вас не устраивает родной JavaScript (вместо Python), который от рождения есть в Qt? Тем более, что в отличие от Python он быстрее, потому что он JIT.

И объекты от Qt туда встраиваются автоматом

не знал. можно глянуть в сторону JavaScript. правда у Python сегодня мощней функционал, все готово и image processing и machine learning и куча других библиотек из коробки. Питон сегодня нереально прокачан. а ну и самое главное - JavaScript не даст выйти в сеть.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, jenya7 said:

правда у Python сегодня мощней функционал, все готово и image processing и machine learning и куча других библиотек из коробки.

Это вопрос необходимости - вам это всё реально нужно?

4 hours ago, jenya7 said:

а ну и самое главное - JavaScript не даст выйти в сеть.

Прочему не даст? У него есть прямой выход в внутренности Qt, а оттуда уже куда угодно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вот. может же когда хочет

from ctypes import *
  
libc = CDLL("mylib.so")  

но! нужно создать файл so:

g++ -fPIC -shared -o mylib.so mylib.o

и тут при загрузке получаю 

Quote

mylib.so: undefined symbol: _ZTI9QRunnable

то есть Питон не видит внешние объекты используемве в  mylib.so. а как создать mylib.so файл рекурсивно, включая все используемые объекты?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...