Найти - Пользователи
Полная версия: запуск процесса с перенаправление вывода.
Начало » Python для экспертов » запуск процесса с перенаправление вывода.
1
severum
Еще один вопрос в последнем посте.

Здравствуйте. Подскажите как выполнить следующую строчку.

ray.exe -v 5 -x on -imgpipe 1 “scene.mi” | imf_disp -

-imgpipe fd
При использовании ключа -imgpipe информация может быть выведена на устройство с дескриптором fd. Например, этот ключ можно использовать для интерактивного подключения к конвейеру вывода программы-вьювера imf_disp.exe

сейчас без imgpipe я делаю примерно так:
cmd = + + + + +
process = subprocess.Popen(args=cmd, bufsize=1, shell=False, env=os.environ)
При этом идет рендер и в консоль выводятся всякие сообщения

при попытке добавить -imgpipe 1 цыфры начинают попадать прямо в консоль в перемешку с сообщениями.

и я не понял как указать Popen-у вот это | imf_disp -

Спасибо.
severum
или подскажите направление
Viper
Я для таких вещей использую os.system.
shiza
severum по идее кошернее использовать subprocess.
Не очень понял в вопросе вот это место:
“-imgpipe fd” - почему оно со следующей строчки. Это вообще к чему? =)

Отвечаю на то, что понял.
Попробуй все загнать в виде строки: args = “ray.exe -v 5 -x on -imgpipe 1 ”scene.mi“ | imf_disp и_что_то_там_еще”
(в документации так написано: args should be a string, or a sequence of program arguments. The program to execute is normally the first item in the args sequence or string, but can be explicitly set by using the executable argument.
)

Имхо чтоб работали каналы - (вот эта вот вертикальная палочка | ) - надо все это в шелле выполнятть. Т.е. shell=True
severum
Спасибо, subprocess действительно кошернее.
-imgpipe fd не наследующей строчке, это просто кусок из описания.
Все заработало.
severum
Как я понял есл я хочу запустить приложение с другим приоритетов под win то это делается так
creationFlags = win32process.BELOW_NORMAL_PRIORITY_CLASS
process = subprocess.Popen(cmd, shell=shellFlag, stdout=subprocess.PIPE, creationflags = creationFlags)
pid = process.pid

Но хочется еще контролировать процесс во время выполнения.
- возможен случай когда приложение виснит во время рендера. как это можно понять?
- хочется в произвольный момент завершить процесс. например если он повис
shiza
severum
Как я понял есл я хочу запустить приложение с другим приоритетов под win то это делается так
Тут сложность в том, что так как ты запускаешь в шелле, то и приоритет повышенный получит шелл. Помню когда-то эту проблему разбирали на форуме

severum
- возможен случай когда приложение виснит во время рендера. как это можно понять?
Я могу придумать несклько вариантов - как понять, что что-то зависло.
1. если это что-то работает уже хрен знает сколько времени. Можно еще на результат глядеть - если результат не меняется и оно работает уже хрен знает сколько времени, то наверняк зависло.
2. так называемый Watch Dog - работающее приложение переодически шлет какой-нибудь сигнал. Если сигналы
перестали поступать - то наверное оно зависло.
Может что-то из этого можно рименить к твоему приложению.

severum
хочется в произвольный момент завершить процесс. например если он повис
Можно убить процесс по pid.
severum
спасибо за помощь.
pyuser
severum
Но хочется еще контролировать процесс во время выполнения.
- возможен случай когда приложение виснит во время рендера. как это можно понять?
- хочется в произвольный момент завершить процесс. например если он повис
Посмотрите тему http://python.com.ua/forum/viewtopic.php?id=2599 девятый пост, похоже это то что Вы ищите
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB