170 похожих чатов

Что еще за "синхронизированная цепочка команд" ? Синхронизированная с чем?

63 ответов

163 просмотра

Изначально просили синхронизировать

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

dm
Пусть будет с пользователем. Вот пусть как в обычн...

Обычно пользователь ждёт пока увидит знакомые символы и начинает вводить следующую команду.

Alex- Автор вопроса
dm
Пусть будет с пользователем. Вот пусть как в обычн...

Ну так же как и с пользователем. Пользователь отслеживает завершение процесса по наличию приглашения PS1 на экране.

Alex
Ну так же как и с пользователем. Пользователь отсл...

Как правило в определенной позиции экрана и приглашение зависит от многих факторов о которых пользователь знает

Tishka17
Обычно пользователь ждёт пока увидит знакомые симв...

Это не будет играть никакой разницы, если консоль не умеет отследить результат выполнения предыдущей команды и показать ввод для следующей. Вот и вся главная проблема решаемой подзадачи. И через высокоуровневые питоновские библиотеки ее не обойти.

Alex- Автор вопроса
dm
Это не будет играть никакой разницы, если консоль ...

При чем тут высокоуровневые питоновские библиотеки?

dm
Это не будет играть никакой разницы, если консоль ...

Консоль? Консоль ничего не отслеживает. Отслеживает шелл

Alex- Автор вопроса
Tishka17
Консоль? Консоль ничего не отслеживает. Отслеживае...

Консоль предоставляет шеллу только pty устройство, в которое он срет

Tishka17
Консоль? Консоль ничего не отслеживает. Отслеживае...

Давай придираться к отдельным словам и дальше. Так очень конструктивно.

dm
Давай придираться к отдельным словам и дальше. Так...

Давай говорить рандомные слова, так же люди смогут понять тебя лучше

Alex
При чем тут высокоуровневые питоновские библиотеки...

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

Alex- Автор вопроса
dm
Питон напрямую общается с ядром и шеллом? Или всет...

> Питон напрямую общается с ядром и шеллом? С каким еще нахрен шеллом?

dm
Питон напрямую общается с ядром и шеллом? Или всет...

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

dm
Пусть будет с пользователем. Вот пусть как в обычн...

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

evle
А чем важно "в рамках созданного подпроцесса с шел...

Что такое родительский процесс в линуксе и важность передачи его окружения в дочерние видна даже по аргументам создания Popen в subprocess. Но уровень дальнейшего общения уже понятен.

Tishka17
Да не было достаточно формально поставленной задач...

Если я начну рассказывать, то по вопросику и вопросику я от решения своей небольшой подзадачи, с которой просто на всякий случай решил обратиться и сюда, я перейду в разряд докладчика. И ради чего? Чтоб по итогу получить еще и хамство от больно умных думающих что если они тут имеют какой статус, то это их реальный уровень вне. В принципе, нормальные ответы тоже были. Спасибо и тебе и @Zart. В общем. Если у кого есть опыт в сложной коммуникации даже с обычным шеллом на питоне было бы интересно его обсудить лично. Потому что тут все-таки чат для новичков с соответствующим уровнем общения.

dm
Что такое родительский процесс в линуксе и важност...

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

dm
Если я начну рассказывать, то по вопросику и вопро...

Хз что такое обычный Шелл и в чем заключается коммуникация.

dm
Если я начну рассказывать, то по вопросику и вопро...

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

А зачем вам знать что передается? Речь пока о самом примитивном. Как на уровне обычного линуксового шелл отследить выполнение каждой из цепочки команд. Не создавая на каждый чих отдельный процесс через subprocess.run, а в рамках одного подпроцесса с запускаемым шеллом. Это понятно вопрос не уровня новичков. Есть те кто все понял. А тем кто не понял оно и не надо.

Никак.

Tishka17
Никак.

Уже давно и решили. Тебе и @Zart спасибо за ответы 🤝

dm
А зачем вам знать что передается? Речь пока о само...

Затем, что это существенным образом влияет на решение. И вполне вероятно, что в итоге задача в таком виде решения не требует, а исходная задача решается куда проще. Типичная xy-problem.

evle
Затем, что это существенным образом влияет на реше...

В рамках линуксового шелла никак не влияет. А на его примере и шел разговор. Но некоторые хотят лекций за чужой счет 😂

dm
А зачем вам знать что передается? Речь пока о само...

И да, в чём проблема с "на каждый чих отдельный процесс" - вообще не ясно. Будто абстрактный шел будет делать иначе. Почему не считать свою замену заменой шелу и не передавать нужный контекст между приложениями - непонятно.

Хорошо. Вот еще конкретный пример-задача для понимания возможных проблем с другими шеллами. Тем более кастомными, со сложным окружением и контекстом, где бывает важен каждый байт памяти. Есть известный adb для работы с андроидами. У него есть режим shell. Допустим такая вроде бы простая конкретная задача. 1. Запустить режим adb shell. 2. Создать рутовую сессию через su. 3. Выполнить в рамках этой сессии пару вызовов. Скажем, ls /data, du /data, touch /data/tmp.txt, rm /data/tmp.txt. Навалять кучку subprocess.run большого ума не потребуется, а вот сделать всë в рамках одного подпроцесса другое дело. И это простой всем доступный пример. Без необходимости объяснять тонну реальных кастомных нутряков.

Alex- Автор вопроса
dm
Хорошо. Вот еще конкретный пример-задача для поним...

Ну и в чем проблем сделать это в рамках одного подпроцесса? /bin/bash -c "cmd1 && cmd2 && cmd3" ?

Alex
Ну и в чем проблем сделать это в рамках одного под...

Мы же вроде в теме по питону где ты модератор. Вот и попробуй написать работающий код без кучек subprocess.run

Alex- Автор вопроса
Alex
subprocess.run(['/bin/bash', '-c', 'cmd1 && cmd2 &...

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

dm
Пусть будет с пользователем. Вот пусть как в обычн...

пользователь не может знать в общем случае

dm
Хорошо. Вот еще конкретный пример-задача для поним...

1. Эта задача начинает иметь смысл, если шел нужен интерактивный, то есть ты заранее не знаешь, что именно будешь запускать и тебе нужно именно реагировать на происходящее и как-то по-разному действовать. Из твоих сообщений никак не следовало, что тебе нужно такое поведение. 2. Для общения с adb есть средства, заточенные конкретно на работу с adb. Не универсальное решение.

evle
1. Эта задача начинает иметь смысл, если шел нужен...

Ну да ладно никак не следовало. Обсуждалось и интерактивность с пользователем, и синхронизация.

Johnny Frideswide
Обычно зарт наоборот угнетает 🧐🧐🧐

я нынче слишком быстро устаю играть в гестапо не хотят люди объяснять свои проблемы - им же хуже

А вот как раз можно обобщить как подзадачу как сделать так чтобы можно было сначала сделать с обычным шелл, потом перенести на адб, а потом развернуть на общий случай с кастомными.

dm
А вот как раз можно обобщить как подзадачу как сде...

В том и дело, что нельзя обобщить. У шелла нет в общем случае стандартного протокола для общения с ним.

Alex- Автор вопроса
dm
А вот как раз можно обобщить как подзадачу как сде...

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

Alex
То есть ты хочешь со стороны питонячьего процесса ...

Да, вот как раз и уткнулись в невозможность отслеживания результата в питоне.

Alex- Автор вопроса
Alex- Автор вопроса
dm
Да, вот как раз и уткнулись в невозможность отслеж...

Питон тут радикально ничем не отличается, реализуй ты это на С или любом другом языке с вызовом системного API

dm
Да, вот как раз и уткнулись в невозможность отслеж...

Давай возьмём какой-нибудь шелл и выкинем из него все операции, связанные с выводом в stdout. Как отслеживать будешь? Пофиг, из питона или не из питона.

evle
Давай возьмём какой-нибудь шелл и выкинем из него ...

Ну, надо сказать, что subprocess.run эту проблему решает. Вот только каждый раз запускается новый подпроцесс на каждый чих. А это уже в случае кастомных вариантов огромная проблема.

Alex- Автор вопроса
dm
Ну, надо сказать, что subprocess.run эту проблему ...

RO 1d. флуд. флейм. научись формулировать свои мысли нормально.

dm
Ну, надо сказать, что subprocess.run эту проблему ...

Если мы запускаем что-то на том же условном линуксе, что и скрипт, субпроцесс не проблема. Если мы имеем дело с adb, нужно общаться с adb по его родному протоколу, а не баловаться с универсальным шелом.

Alex- Автор вопроса
danraponga
как расшифровывается RO?

CD-ROM видел? Чем отличается от CD-RW?

Alex
read-only

понял, спасибки

Alex- Автор вопроса
Tishka17
CD-ROM видел? Чем отличается от CD-RW?

это рофл или ты серьезно?

Alex- Автор вопроса
Alex
Ты еще дискеты вспомни

О, тут недавно заказывали на кикстартере по good omens всякое. Так в каких-то наборах они предлагают дискеты

Alex- Автор вопроса
Tishka17
О, тут недавно заказывали на кикстартере по good o...

книга \ сериал или графическая новелла?

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта