Как предотвратить вывод подпроцесса на стандартный вывод в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как предотвратить вывод подпроцесса на стандартный вывод в Python?

Сообщение Anonymous »


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

Вот что у меня есть:

server_command = "./start.sh >/dev/null 2>&1" server_cwd = "/home/mehran/Project" процесс = subprocess.Popen(server_command, оболочка = Ложь, cwd=server_cwd, стандартный вывод = подпроцесс.DEVNULL, stderr=subprocess.DEVNULL) Как я уже упоминал, при этом выходные данные подпроцесса все равно будут выводиться в оболочку. Я также попробовал все другие комбинации, которые только мог придумать (без >/dev/null 2>&1, а затем без subprocess.DEVNULL)

[ОБНОВЛЕНИЕ]

Чтобы ответить на некоторые комментарии, я протестировал следующие случаи с одинаковыми результатами:
[*]shell=True [*][server_command] [*]stdin=subprocess.DEVNULL
Я добавил последний, хотя сценарий start.sh ничего не читает из стандартного ввода. Честно говоря, я не полностью прочитал сценарий, но, насколько я могу судить, он выполняет conda active . и запускает другую программу на Python. Дело в том, что я бы предпочел не трогать этот скрипт и подавлять вывод независимо от ситуации внутри этого скрипта.

[ОБНОВЛЕНИЕ]

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

./start.sh >/dev/null 2>&1 Я не получаю нет вывода, что заставляет меня задуматься, почему тот же подход не работает при вызове из кода Python!

[ОБНОВЛЕНИЕ]

Если кто-то хочет повторить эту проблему, клонируйте следующий проект:

https://github.com/oobabooga/text-generation-webui

И затем запустите:

./start_linux.sh --api Это сценарий, которым я пытаюсь управлять в своем коде. Просто вам также нужно отправить HTTP-запрос для загрузки модели, чтобы увидеть упомянутый мной результат:

curl --request POST \ --url http://localhost:5000/api/v1/model \ --header 'Тип контента: приложение/json' \ --data '{"action": "load", "model_name": "TheBloke_WizardLM-1.0-Uncensored-CodeLlama-34B-AWQ"}' model_name относится к модели, которую вы загрузили в приложение. На самом деле это довольно просто.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»