Как я пишу, что Unix просачивается Python?

Это может создать бесконечное обсуждение, но существует один принцип, которого я придерживался бы, решая что лицензию использовать: не СОЗДАЮТ НОВЫЙ!!

, Неважно, как убедительный аргументы Вашего легального парня, что, потому что никакая текущая лицензия точно не удовлетворяет уникальные потребности Вашего проекта, необходимо записать собственное, или даже просто "немного, изменяют" существующий, рассматривайте его как программист, приезжающий к Вам утверждающий, что он всего ИМЕЕТ для использования Оператора перехода, потому что ничто иное на языке не будет работать.

Другой совет:

12
задан flybywire 19 October 2009 в 17:24
поделиться

4 ответа

I don't know exactly what you mean by buffered in this context, but it is pretty simple to do what you are asking...

so_gen.py (generating a constant stream that we can watch):

import time
import sys
while True:
    for char in 'abcdefx':
        sys.stdout.write(char)
        sys.stdout.flush()
        time.sleep(0.1)

so_filter.py (doing what you ask):

import sys
while True:
    char = sys.stdin.read(1)
    if not char:
        break
    if char != 'x':
        sys.stdout.write(char)
        sys.stdout.flush()

Try running python so_gen.py | python so_filter.py to see what it does.

7
ответ дан 2 December 2019 в 04:25
поделиться

Прочтите из sys.stdin и напишите в sys.stdout (или используйте print ). Ваш пример программы:

import sys

for line in sys.stdin:
    print line.replace("x", ""),

Нет ' стандартный способ сделать стандартный ввод небуферизованным, а вы этого не хотите. Пусть ОС его буферизует.

13
ответ дан 2 December 2019 в 04:25
поделиться

Вы можете использовать fileinput класс , который позволяет обрабатывать входные данные, как это сделал бы алмазный оператор Perl. Из документации:

import fileinput
for line in fileinput.input():
    process(line)

где процесс делает что-то вроде print line.replace ('x', '') .

Вы можете следовать этому вопросу StackOverflow , чтобы узнать, как разблокировать стандартный вывод. Или вы можете просто вызвать sys.stdout.flush () после каждого вывода .

12
ответ дан 2 December 2019 в 04:25
поделиться

Use the -u switch for the python interpreter to make all reads and writes unbuffered. Similar to setting $| = true; in Perl. Then proceed as you would, reading a line modifying it and then printing it. sys.stdout.flush() not required.

#!/path/to/python -u

import sys

for line in sys.stdin:
    process_line(line)
2
ответ дан 2 December 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: