URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10268
[ Назад ]

Исходное сообщение
"непонятки с stdin\stdout"

Отправлено noname_123йцуфыв , 13-Апр-19 20:33 
Здравствуйте.

Проблемка в получении вывода родительского для скрипта процесса.

Есть процесс(lighttpd) который запускает скрипт командой "sh -c script" и передает ему свой вывод.
Мне надо получать этот вывод и в зависимости от длинны строки или записывать его или нет.
Если скрипт написан на bash то все работает, и скрипт получает вывод от lighttpd.
Вот простой работающий пример:

#!/bin/sh

char="1"
end="2"

while [ $char != $end ];
do
read ok
echo $ok >>/var/log/lighttpd/log
done

А вот с помощью питона я получить вывод не могу, причем если запускать скрипт вручную и вводить что-либо, то скрипт работает, если передавать ему значения через "echo | ./script.py" то он тоже работает, а вот от lighttpd уже нет.
Простой неработающий пример:

#!/usr/bin/python3

import sys
import time


logfile = open('/var/log/lighttpd/log', mode='at', encoding='UTF-8')

while True:

        line = input()
#       line = sys.stdin()
#       line = sys.stdin.read()
#       line = sys.stdin.readline()
#       line = sys.stdin.readlines()
        logfile.write(line)                    #пишем в файл

logfile.close()

почему так?


Содержание

Сообщения в этом обсуждении
"непонятки с stdin\stdout"
Отправлено noname_123йцуфыв , 13-Апр-19 23:17 
написал модератору чтобы удалил, но пока висит...

вообщем надо было файл открывать\закрывать в цикле.


#!/usr/bin/python3

import sys

while True:
        logfile = open('/var/log/lighttpd/log', mode='at', encoding='UTF-8')
        line = sys.stdin.readline()
        logfile.write(line)
        logfile.close()