Я запускаю программу в сценарии оболочки. Как я узнаю, что он загружен? (Linux)

Я написал сценарий оболочки, который запускает программу на Python. Затем я хочу загрузить файл в программу с помощью xdotool. Прямо сейчас это мой код:

#!/bin/bash
cd ~/Folder
python program.py &
sleep 10
WID=$(xdotool search --onlyvisible program)
....

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

1 ответ

Это действительно зависит. Если program.py должен закончить, а затем перейти к xdotool тогда вы можете использовать && вместо &, Один & означает, что вы хотите выполнить команду, а затем переходите к следующей команде как можно скорее, не дожидаясь ее завершения. Добул && означает, что вы хотите дождаться завершения выполнения, а затем продолжить, только если у вас есть выход с нулевой ошибкой. Вы также можете просто удалить & или использовать ; если вы хотите выполнить следующую команду независимо от program.pyУспех Вот что я получаю:

#!/bin/bash
cd ~/Folder
python program.py &&
WID=$(xdotool search --onlyvisible program)
...

Если program.py предполагается продолжить бежать, пока вы запускаете xdotool команда, но вам нужно program.py чтобы прийти в какое-то состояние готовности, прежде чем продолжить, то вы правы в использовании &, но вам нужно следить за program.py как-то, и получить сигнал от него, что это нормально, чтобы продолжить. Древний способ сделать это просто позволить program.py создайте / коснитесь / отредактируйте файл, и когда этот файл будет обнаружен, вы продолжите. Более продвинутым способом было бы использовать сетевые сокеты или подобное, но я бы посоветовал против этого, если вам действительно не нужно делать что-то причудливое. Во всяком случае, если вы делаете program.py создать файл сигнала, скажем /tmp/.program_signalfileкогда все готово, все, что вам нужно сделать, это:

#!/bin/bash
cd ~/Folder
python program.py &
until [ -f /tmp/.program_signal_file ]
do
    sleep 1
done
WID=$(xdotool search --onlyvisible program)
rm /tmp/.program_signal_file
...

В этом последнем решении program.py а также xdotool оба работают в одно и то же время. Если это то, что вы искали.

Другие вопросы по тегам