python передача данных между скриптами

Передать переменную между скриптами python

Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Итак, для упрощенного примера мой первый скрипт:

и мой второй скрипт,

и я ожидал бы, что он напечатает x, но я получаю

Я не уверен, что импорт является правильным способом достижения это, но если бы кто-то мог пролить свет на это простым способом, это было бы здорово!

редактировать

после прочтения комментариев я думал, что расширю свой вопрос. Aswin Murugesh answer исправляет проблему импорта, которую я имел, однако решение не имеет желаемого результата, поскольку я не могу передать элементы в списке таким образом.

In first.py у меня есть список, который я обрабатываю следующим образом

Я хотел передать каждый элемент в списке во второй файл python для дальнейшей обработки( веб-скрейпинг), я не хотел делать это в first.py поскольку это должна быть основная программа «сканирования», которая затем вызывает другие программы. Надеюсь, теперь в этом больше смысла.

Спасибо за комментарии до сих пор.

4 ответов

ответ уже указан в этом посте SO, в самом вопросе:

но я просто объясню это здесь, в вашем контексте.

чтобы получить то, что вы хотите, в вашем случае, начните с названием script с следующую строку:

Это позволяет ему получить доступ к пространству имен (все переменные и функции) вызывающего скрипта.

Итак, теперь ваш вызывающий скрипт, как и раньше:

Источник

[python] Как бы эдак реализовать обмен данными между программами?

Допустим есть две программы А и Б.

Программа Б занимается дальнейшим преобразованием данных, полученных из программы А.

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 24345:1808597202. python передача данных между скриптами фото. python передача данных между скриптами-24345:1808597202. картинка python передача данных между скриптами. картинка 24345:1808597202. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

слушать/читать юнегз-сокеты как вариант

python передача данных между скриптами. 81782: 128961258. python передача данных между скриптами фото. python передача данных между скриптами-81782: 128961258. картинка python передача данных между скриптами. картинка 81782: 128961258. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

MQ? Например AMQP, например, RabbitMQ?

Через какой-то RPC? DCOM? CORBA?

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Вы что, Стивенса еще не читали?

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Пайпы решают порблему практически идеально. Через Popen в программе Б запускаем прогрмамму А и далее по тексту.

Ну если совсем хочется странного, то ZeroMQ сокеты.

только corba, только хардкор! (шутка)

В модуле multiprocessing есть queue. Может подойдет.

Данные программа может выдавать раз 20 за секунду

Нет, dbus тут явно не подходит.

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

dbus подходит, просто это оверкил

python передача данных между скриптами. 72431:210733727. python передача данных между скриптами фото. python передача данных между скриптами-72431:210733727. картинка python передача данных между скриптами. картинка 72431:210733727. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

>Пока что смотрю в сторону D-Bus

dbus? либо CORBA либо SOAP конечно же!

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

>Пайпы решают порблему практически идеально. Через Popen в программе Б запускаем прогрмамму А и далее по тексту.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Кидать данные в shm

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 36786: 1125460561. python передача данных между скриптами фото. python передача данных между скриптами-36786: 1125460561. картинка python передача данных между скриптами. картинка 36786: 1125460561. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Мне одна замечательная программа в дебиане весь мозг изнасиловала своим долбанным shm.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 36786: 1125460561. python передача данных между скриптами фото. python передача данных между скриптами-36786: 1125460561. картинка python передача данных между скриптами. картинка 36786: 1125460561. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

У меня была потребность запустить кое-какое барахло в чрут. а оно использовало shm.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

А что, в чруте разве разделяемая память не работает?

python передача данных между скриптами. 36786: 1125460561. python передача данных между скриптами фото. python передача данных между скриптами-36786: 1125460561. картинка python передача данных между скриптами. картинка 36786: 1125460561. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

У меня (тогда был дебиан) не стала, отказалось пахать ругаясь именно на неё.

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

О! Вот это кажись прям то, что надо.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

/dev/ в чрут смонтировал?

python передача данных между скриптами. 36786: 1125460561. python передача данных между скриптами фото. python передача данных между скриптами-36786: 1125460561. картинка python передача данных между скриптами. картинка 36786: 1125460561. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 9745:317955381. python передача данных между скриптами фото. python передача данных между скриптами-9745:317955381. картинка python передача данных между скриптами. картинка 9745:317955381. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

текущего буфера. Клиенты забирают картинку из текущего буфера.

Интересный алгоритм. Спасибо.

Примерно как переключение цветовых плоскостей в VGA-/EGA-адаптерах и экранов в OpenGL.

python передача данных между скриптами. 27542: 1749553986. python передача данных между скриптами фото. python передача данных между скриптами-27542: 1749553986. картинка python передача данных между скриптами. картинка 27542: 1749553986. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

текущего буфера. Клиенты забирают картинку из текущего буфера.

Ring buffer. Welcome to club!

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Ну, это стандартный механизм работы v4l2 при буферизации в буферы пользователя.

Нужно лишь подготовить эти буферы и пятый буфер, в котором будет находиться номер актуального на данный момент времени.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 48574: 1474163456. python передача данных между скриптами фото. python передача данных между скриптами-48574: 1474163456. картинка python передача данных между скриптами. картинка 48574: 1474163456. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

А какой-нибудь zmq чем не?

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Не знаю чем, но тоже потыкаю =)

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 68049: 899679315. python передача данных между скриптами фото. python передача данных между скриптами-68049: 899679315. картинка python передача данных между скриптами. картинка 68049: 899679315. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

емнип от zmq профит будет только если у тебя не одна машина, shm вообще хранится у тебя в озу и не просит сеть\винтчестер

python передача данных между скриптами. 37071:399213943. python передача данных между скриптами фото. python передача данных между скриптами-37071:399213943. картинка python передача данных между скриптами. картинка 37071:399213943. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

а как клиенты будут оповещаться о заполнении буфера? вариант «проверять N раз в секунду» ущербен, вариант «dbus» ущербен. разве что юникс-сокеты таки подключать.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. 37071:399213943. python передача данных между скриптами фото. python передача данных между скриптами-37071:399213943. картинка python передача данных между скриптами. картинка 37071:399213943. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

интересно, через что будет удобнее реализовать

MQ выше уже советовали.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Пока не появится следующий кадр. Либо пока программа не получит SIGHUP. Я исходники вроде выкладывал (вот старая версия на гуглокоде). Если нет, могу выложить. Только вряд ли вам этот быдлокод будет интересен.

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

ну тогда прямая дорога к zmq

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Грубо говоря, zmq сделает примерно тоже самое, что ты будешь делать с shm, только тебе ещё придётся это придумать.

мнип от zmq профит будет только если у тебя не одна машина, shm вообще хранится у тебя в озу и не просит сеть\винтчестер

zmq использует тот же shm как один из вариантов ipc. И локальные юникс сокеты (тоже вариант ipc для zmq) на «юниксах» тоже бесплатны.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Сокет можно в shm запихать =)

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

shm вообще слово плохое, нечего тут выражаться

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

совсем неправда. Самый _удобный_ способ это пайпы и юникс сокеты если из стандартных средств брать.

python передача данных между скриптами. 40709:1576041504. python передача данных между скриптами фото. python передача данных между скриптами-40709:1576041504. картинка python передача данных между скриптами. картинка 40709:1576041504. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Самый _удобный_ способ это пайпы и юникс сокеты

Которые реализуются через «ядреную» разделяемую память 🙂

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

слушай, вот не надо то в друрочку играть

python передача данных между скриптами. 47300: 1812380085. python передача данных между скриптами фото. python передача данных между скриптами-47300: 1812380085. картинка python передача данных между скриптами. картинка 47300: 1812380085. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Не вижу никакого гемора у обоих способов. У zmq в питоне все элементарно и понятно, код не более чем несколько строк. У shm аналогично, не вижу где там можно гемор получить, если одна прога пишет в файл и несколько прог считывают его =)

python передача данных между скриптами. 52537:2144913675. python передача данных между скриптами фото. python передача данных между скриптами-52537:2144913675. картинка python передача данных между скриптами. картинка 52537:2144913675. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Ох, ребята. Ну прямо ниибаца иксперты и орхитектыри, я извиняюсь. Закидали топикстартера ответами различной степени релевантности, и при этом умудрились не задать два самых главных вопроса:

1) Программы А и Б работают на одной машине, или же на разных? Возможно ли в будущем распределенное развертывание? Это существенным образом повлияет на выбор local IPC vs. remote IPC.
2) Программа А выплевывает данные синхронным или асинхронным образом? То есть, грубо говоря, есть ли необходимость получить от программы Б подтверждение того, что данные получены и (возможно) обработаны.

Одно тут ясно, текстовые протоколы (SOAP, XMLRPC, REST/JSON) слабо релевантны в силу как большого оверхеда по передаваемым данным, так и в силу относительно больших расходов на парсинг. Есть области, где веб-сервисы незаменимы, но это явно не тот случай.

python передача данных между скриптами. 52537:2144913675. python передача данных между скриптами фото. python передача данных между скриптами-52537:2144913675. картинка python передача данных между скриптами. картинка 52537:2144913675. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

В любом случае, рекомендую изучить, как устроен RPC между компонентами Deluge (deluged и собственно GUI). Требованиям вполне удовлетворяет.

python передача данных между скриптами. 45404:1262368764. python передача данных между скриптами фото. python передача данных между скриптами-45404:1262368764. картинка python передача данных между скриптами. картинка 45404:1262368764. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

>Одно тут ясно, текстовые протоколы (SOAP, XMLRPC, REST/JSON) слабо релевантны в силу как большого оверхеда по передаваемым данным, так и в силу относительно больших расходов на парсинг. Есть области, где веб-сервисы незаменимы, но это явно не тот случай.

Еще раз перечитал тред и так и не понял, почему ТСу не подойдут текстовые протоколы?

python передача данных между скриптами. 52537:2144913675. python передача данных между скриптами фото. python передача данных между скриптами-52537:2144913675. картинка python передача данных между скриптами. картинка 52537:2144913675. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

> почему ТСу не подойдут текстовые протоколы?

Ни одного подобного требования от ТСа не прозвучало. Впрочем, от него вообще пока мало чего прозвучало 🙂 Предлагаю дождаться его ответов на вышеприведенные вопросы, а потом уже что-то предлагать.

python передача данных между скриптами. p. python передача данных между скриптами фото. python передача данных между скриптами-p. картинка python передача данных между скриптами. картинка p. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Текстовые протоколы оправданы а) в случае интеграции распределенных гетерогенных систем.

в детсад с такой ахинеей.

python передача данных между скриптами. 58673:195471864. python передача данных между скриптами фото. python передача данных между скриптами-58673:195471864. картинка python передача данных между скриптами. картинка 58673:195471864. Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной скрипт python вызывал другой скрипт python и передавал переменные из исходного скрипта в скрипт, который я назвал

Господин мазохист, поведайте нам, что не так?

Источник

Удалённое исполнение системных команд по запросу через сокеты на Python 3. Часть 2. Протокол передачи данных

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

Описание протокола

Мы использовали «голый» протокол TCP для передачи данных между сервером и клиентом. TCP — это потоковый протокол, он передаёт данные последовательным набором байт. Передавая команду с аргументами по сети в первой версии нашего приложения мы читали только 1024 байт данных из принятого пакета. Но что делать, если данные не помещаются в 1024 байт? Выход только один — разбить данные на несколько пакетов на одном хосте и «склеить» их в один кусок при получении на другом хосте. Но как узнать когда заканчивается одна команда (с её аргументами) и начинается другая? Для этого нам нужно нужно знать, какова длина всего передаваемого сообщения.

Так как заранее узнать длину сообщения у нас не получиться, придётся передавать её в одном из пакетов. Разумеется, делать это лучше в самом начале первого пакета. Выделив под хранение длины сообщения всего 4 байта, мы сможем передать сообщение длиной свыше 4 млрд символов! Длина сообщения — это информация о нём, то есть, часть заголовка, заголовка нашего протокола. Какого протокола спросите вы? Если верить Википедии, то

Протокол передачи данных — набор соглашений интерфейса логического уровня, которые определяют обмен данными между различными программами.

Разработка протокола

Мы описали наш протокол, настало время его разработать!

Метод sendall сокета в Питоне самостоятельно разбивает данные на пакеты и отправляет их на сервер. Здесь можно не париться. Для передачи длины переведём её в C struct типа unsigned int (4 байта) используя встроенную библиотеку struct.

Параметр ‘>I’, переданный функции struct.pack просит перевести второй параметр в тип unsigned int (I) в обратном порядке байт (>). Рассмотрим это чуть позже.

В функции recv_packets мы читаем уже полученные данные до тех пор, пока не получим часть сообщения необходимой нам длины. Если метод recv сокета ничего не вернёт, значит мы не смогли получить сообщение полностью. В этом случае тоже нечего не возвращаем, а тогда ничего не вернёт и функция recv нашего протокола.

Использование протокола

Теперь мы можем воспользоваться нашим протоколом, написанным поверх другого протокола — TCP. Заодно, я буду рассказывать о том, что происходит в этот момент под капотом.

Для начала зайдите в каталог с только что созданным файлом protocol.py и запустите интерпретатор Python 3 (обычно это команда python3) в двух терминалах, интерпретаторах командных строк, или среде разработки. В обоих поочерёдно введите следующие команды.

Первая строка импортирует библиотеку сокетов и наш мини-протокол, вторая — создаёт сокет с протоколом TCP/IPv4. AF_INET — пара (домен/IPv4, порт), SOCK_STREAM — потоковый тип подключения, на котором основан TCP протокол.

Следующие две строки вводятся в первый терминал.

В этот момент операционная система система занимает для нашего приложения адрес localhost:65043 и наше приложение начинает его слушать. Если вы ещё не поняли, сокет — это программный интерфейс, который создаётся операционной системой.

Присоединяемся к серверу через второй терминал.

В этот момент происходит следующее. Клиент отправляем небольшой пакет. Первый пакет у меня имеет длину 74 байта. (длина не всегда такая, я привожу её, чтобы было примерно понятно, что же отправляется в момент установления соединения.) Их можно разложить так: 8 байт — два Ethernet адреса, 20 байт — IP-заголовок, и 46 байт — TCP-заголовок. В пакете есть два бита из TCP-заголовка — syn и ack. В первом пакете syn = 1, ack = 0. После этого сервер отправляет нам пакет такой же длины (74 байта), подтверждая получение и разрешая подключиться, при этом syn = 1, ack = 1. Затем клиент отправляет уже третий пакет, но длиной не 74, а 66 байт. В третьем пакете syn = 0, ack = 1. Этот пакет окончательно устанавливает соединение и теперь мы можем принимать и получать пакеты. Так выглядит благополучное соединение. Если вам хочется более подробно изучить TCP и другие возможные случаи, можете прочитать об этом, например, в книге Танентбаума «Компьютерные сети».

Читаем информацию о клиенте. В этот момент никаких пакетов не передаётся, мы просто берём уже записанные данные.

Во втором терминале вводим

Этой строчкой мы отправляем сообщение серверу, используя наш мини-протокол.
В этот момент мы отправляем серверу пакет со следующим содержанием (исключая заголовки):
00:00:00:11:48:65:6c:6c:6f:2c:20:6c:6f:63:61:6c:68:6f:73:74:21

00:00:00:110x11, или 17 в десятичной системе счисления, — длина переданного сообщения (не данных, а именно сообщения, так как данные, в данном случае, — это 4 байта длины + сообщение).
48:65:6c:6c:6f:2c:20:6c:6f:63:61:6c:68:6f:73:74:21 — переданная строка Hello, localhost!
Сервер отвечает нам другим пакетом, подтверждая получение.

И наконец читаем и декодируем сообщение в первом терминале, клиенте:

Можно разорвать соединение, введя во втором терминале

Клиент посылает серверу пакет с установленным битом fin, говоря о том, что у него больше нет данных для передачи и он хочет разорвать соединение. В ответ сервер так же отправляет пакет с битом fin = 1.
Эта же команда в первом терминале остановит работу сервера и он перестанет слушать.

Источник

Передачи переменных между скриптами python

Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой основной сценарий python вызывал другой сценарий python и передавал переменные из исходного сценария в сценарий, который я вызвал

Итак для упрощенного примера мой первый сценарий,

и мой второй сценарий,

и я ожидал бы, что он напечатает x, но я получаю

Я не уверен, что импорт-это правильный способ достичь этого, но если бы кто-то мог пролить свет на это простым способом, это было бы здорово!

EDIT

Прочитав комментарии, я решил расширить свой вопрос. Aswin Murugesh answer исправляет проблему импорта, с которой я столкнулся, однако решение не имеет желаемого результата, так как я не могу передать элементы в списке таким образом.

В first.py у меня есть список, который я обрабатываю следующим образом

Я хотел передать каждый элемент списка во второй файл python для дальнейшей обработки (веб-скребок), я не хотел делать это в first.py, так как это должна быть основная программа ‘scan’, которая затем вызывает другие программы. Я надеюсь, что теперь это имеет больше смысла.

Спасибо за комментарии до сих пор.

5 ответов

У меня есть 2 python сценариев. 1-й-это сервер Flask, а 2-й-скрипт NRF24L01 receiver/transmitter(On Raspberry Pi3). Оба сценария выполняются одновременно. Я хочу передать переменные (переменные не являются постоянными) между этими 2 сценариями. Как я могу сделать это самым простым способом?

В чем разница между скриптами U2 и базовым кодом UniVerse в базе данных UniVerse?

Ответ уже изложен в этом посте SO, в самом вопросе:

Но я просто объясню это здесь в вашем контексте.

Чтобы получить то, что вы хотите в своем случае, начните вызываемый сценарий со следующей строки:

Это позволяет ему получить доступ к пространству имен (все переменные и функции) вызывающего скрипта.

Так что теперь ваш вызывающий скрипт, как и раньше:

и вызываемый сценарий является:

Это должно сработать нормально.

используйте следующий сценарий:

это выведет значение x. Всегда импортируемые данные скрипта должны ссылаться на имя скрипта, как в first.x

Чтобы избежать загрязнения пространства имен, импортируйте переменные по отдельности: from __main__ import x и так далее. В противном случае вы столкнетесь с конфликтами имен, о которых не знали.

Попробуйте использовать exec Python3.5:

Вы также можете передать x с помощью:

Не уверен, что это хороший способ.

Я создал пакет для Python, чтобы решить эту проблему.

Установите Guli с PIP.

Guli не требует установки какого-либо дополнительного пакета PIP.

С помощью пакета вы можете

Guli можно использовать для передачи между различными скриптами Python, между многими процессами или в одном скрипте. передача переменных между основным процессом и другим (Многопроцессным) Процесс.

Пример

Надеюсь, я решил эту проблему для многих людей!

Пожалуйста, дайте мне знать разницу между рукописным кодом и записанными скриптами в инструментах автоматизации тестирования, таких как кодированный пользовательский интерфейс или любые другие инструменты. С Уважением, Радж

Можно ли синхронизировать JavaScript объектов между Greasemonkey скриптами? Я создал скрипт блокировки веб-сайтов, который хранит список веб-сайтов для блокировки, а также список веб-сайтов для разрешения, но я еще не знаю, есть ли у Greasemonkey какие-либо методы для синхронизации этих переменных.

Похожие вопросы:

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

Я пытаюсь перемещать переменные между сценариями. У меня есть два сценария: script1.py и script2.py В script1.py я использую sys.argv для создания переменной с именем country. Эта переменная.

У меня есть 2 python сценариев. 1-й-это сервер Flask, а 2-й-скрипт NRF24L01 receiver/transmitter(On Raspberry Pi3). Оба сценария выполняются одновременно. Я хочу передать переменные (переменные не.

В чем разница между скриптами U2 и базовым кодом UniVerse в базе данных UniVerse?

Пожалуйста, дайте мне знать разницу между рукописным кодом и записанными скриптами в инструментах автоматизации тестирования, таких как кодированный пользовательский интерфейс или любые другие.

Можно ли синхронизировать JavaScript объектов между Greasemonkey скриптами? Я создал скрипт блокировки веб-сайтов, который хранит список веб-сайтов для блокировки, а также список веб-сайтов для.

Я работаю над проектом, но мне нужно передавать переменные между функциями, и я не знаю, как это сделать. Я вообще не очень хорош в python. Я только месяц назад начал его изучать. Во всяком случае.

Каков наилучший способ передачи переменных между классами с этими условиями: Никакого наследства Никаких статических или абстрактных функций Два класса в разных файлах PHP Так Class.php Class 1<.

Источник

Как обмениваться переменными между скриптами в python?

выполняется в двух командных строках как:

(второй получает ошибку атрибута, правильно).

Есть ли способ выполнить это, то есть поделиться переменной между двумя скриптами?

ОТВЕТЫ

Ответ 1

Надеюсь, что это хорошо, чтобы записать мои заметки об этой проблеме.

Таким образом, большинство обращений относительно «общих переменных» и «межпроцессного общения» (IPC) обсуждают такие случаи, как эти два; однако в обоих случаях можно наблюдать «родителя», к которому «дети» обычно имеют ссылку.

Теперь, имея дело с этой проблемой в Perl, есть IPC::Shareable; который «позволяет привязать переменную к общей памяти», используя «целое число или 4 символьную строку [1], которая служит общим идентификатором для данных в пространстве процесса». Таким образом, нет временных файлов, а также сетевых настроек, которые я считаю отличными для моего варианта использования; поэтому я искал то же самое в Python.

Однако, как принятый ответ от @Drewfer отмечает: «Вы не сможете делать то, что хотите, не сохраняя информацию где-то внешнюю по отношению к двум экземпляры переводчика»; или другими словами: либо вы должны использовать настройку сети/сокета, либо вам нужно использовать временные файлы (ergo, нет общей RAM для «полностью отдельных сеансов python» ).

В дополнение ко всем ловушкам в записи «synchronize a python dict» в случае списка есть дополнительные. Это сообщение отмечает:

Все манипуляции с dict должны выполняться с помощью методов, а не диктовых назначений (syncdict [ «blast» ] = 2 терпит неудачу из-за того, что многопроцессорность делится пользовательскими объектами)

Другие связанные вопросы:

Ответ 2

Вы не сможете делать то, что хотите, не сохраняя информацию где-то внешнюю по отношению к двум экземплярам интерпретатора.
Если это просто простые переменные, которые вы хотите, вы можете легко сбрасывать питон python в файл с помощью модуля pickle в script one, а затем повторно загружать его в script два. Пример:

Ответ 3

sudo apt-get install memcached python-memcache

Ответ 4

То, что вы пытаетесь сделать здесь (сохранение общего состояния в модуле Python над отдельными интерпретаторами python), не будет работать.

Значение в модуле может быть обновлено одним модулем, а затем прочитано другим модулем, но это должно быть в пределах одного интерпретатора Python. То, что вы, кажется, делаете здесь, на самом деле своего рода межпроцессное общение; это может быть достигнуто через сокетную связь между двумя процессами, но это значительно менее тривиально, чем то, что вы ожидаете иметь здесь.

Ответ 5

Вы можете использовать относительный простой файл mmap. Вы можете использовать shared.py для хранения общих констант. Следующий код будет работать с разными интерпретаторами Python\scripts\process

* Этот код был написан для Windows, Linux может нуждаться в небольших корректировках

Ответ 6

Вам нужно сохранить переменную в каком-то постоянном файле. Для этого есть несколько модулей, в зависимости от вашей конкретной потребности.

Модуль pickle и cPickle может сохранять и загружать большинство объектов python в файл.

Модуль полки может хранить объекты python в словаре-подобной структуре (используя рассол за кулисами).

Модули dbm/bsddb/dbhash/gdm могут хранить строковые переменные в словаре-подобной структуре.

Модуль sqlite3 может хранить данные в легкой базе данных SQL.

Ответ 7

Я бы посоветовал вам использовать модуль multiprocessing. Вы не можете запускать два сценария из командной строки, но вы можете иметь два отдельных процесса, которые легко могут разговаривать друг с другом.

Из примеров документа:

Ответ 8

Используйте текстовые файлы или переменные среды. Поскольку эти два варианта выполняются отдельно, вы не можете делать то, что вы пытаетесь сделать.

Ответ 9

Ответ 10

Использование Redis для предоставления динамической переменной:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *