Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Обрезается поток по ширене окна терминала


Автор: vaddsm 3.7.2007, 10:59
Код

if(open($stream,"ps -aux|"))
{
 while($r = <$stream>)
 {
  # если запустить такой скрипт из шелл, то $r будет содержать обрезанную строку в ширину окна терминала
  # как считать все данные ps -aux не взерая на то какой ширины окно терминала из которого запущен этот скрипт
 }
}



Автор: dimes 3.7.2007, 11:13
ps -auxwwww
хм... если я конечно не ошибся с кол-вом "w"  smile 

Автор: amg 3.7.2007, 11:53
Цитата(vaddsm @  3.7.2007,  10:59 Найти цитируемый пост)
если запустить такой скрипт из шелл, то $r будет содержать обрезанную строку в ширину окна терминала
Возможно, это зависит от терминала. У меня (в xterm) $r не обрезается.

Еще, быть может, накладываются свойства шелла (open с двумя параметрами использует шелл для исполнения команды). Чтобы выполнить команду без посредничества шелла (это тем более уместно для такой команды как ps - дольше шелл запускать, чем ее исполнить), нужно open с более чем двумя параметрами:
Код

open($stream, '-|', "ps aux")
И - перед aux лишний.

Автор: sharq 3.7.2007, 11:53
dimes, меньше smile

ps auxww

 smile

Добавлено через 2 минуты и 13 секунд
amg, формат вызова open не влияет! 
Хотя верно подметил, с версии Perl 5.8.x стОит использовать open c 3мя параметрами.



Автор: dimes 3.7.2007, 12:17
Цитата(sharq @  3.7.2007,  12:53 Найти цитируемый пост)
dimes, меньше

Спорить не буду, админ говорил что на некоторых платформах нужно больше w но на каких и почему внятно объяснить не могу  smile

я лично для таких вещей open не использую по-моему лучше:

Код

 for(`ps -auxww`) {
   my $_r=$_;
 }

Автор: sharq 3.7.2007, 12:20
dimes
Цитата(dimes @  3.7.2007,  13:17 Найти цитируемый пост)
я лично для таких вещей open не использую по-моему лучше:

если тебе нужно общаться с процессом через пайп? то без open ничего хорошего не получится.
Хотя с ps проблем не будет, если например - mplayer - то тут уже никуда не деться.

 smile 

Автор: dimes 3.7.2007, 12:40
Цитата(sharq @  3.7.2007,  13:20 Найти цитируемый пост)
если тебе нужно общаться с процессом через пайп?

А о чем мне общаться с ps?  smile
некоторые процессы не заслуживают даже что бы их слушали дернул их system-ом посмотрел статус и забыл о нем  smile

Автор: vaddsm 3.7.2007, 13:04
Код

open($stream, '-|', "ps aux")


дал как не странно тот же результат.

а вот

Код

for(`ps -auxww`) {
   my $_r=$_;
 }
 


на ура.

Спасибо!

Автор: sharq 3.7.2007, 13:18
vaddsm, )))))
Цитата(vaddsm @  3.7.2007,  14:04 Найти цитируемый пост)
"ps aux")


Цитата(vaddsm @  3.7.2007,  14:04 Найти цитируемый пост)
ps -auxww


нади отличия!

Автор: nitr 3.7.2007, 13:43
smile

vaddsm, поидее man ps, т.к. нет ps -... есть ps ...

;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)