Python - простые строки чтения от канала

Вы можете использовать lapply, чтобы передать каждый столбец в str_length, а затем cbind в исходный data.frame ...

library(stringr)

out <- lapply( df , str_length )    
df <- cbind( df , out )

#     col1     col2 col1 col2
#1     abc adf qqwe    3    8
#2    abcd        d    4    1
#3       a        e    1    1
#4 abcdefg        f    7    1
15
задан Kiv 8 June 2009 в 14:38
поделиться

2 ответа

Некоторые старые версии Windows имитировали конвейеры через файлы (поэтому они были подвержены таким проблемам), но это не было проблемой более 10 лет. Попробуйте добавить

  sys.stdout.flush()

к производителю после print , а также попробуйте сделать стандартный вывод производителя небуферизованным (с помощью python -u ).

Конечно, это не так ' t поможет, если у вас нет контроля над производителем - если он буферизует слишком много своих выходных данных, вам все равно придется ждать долго.

К сожалению - хотя существует множество подходов к решению этой проблемы в Unix-подобных системах такие системы, как pyexpect, pexpect , exscript и paramiko , я сомневаюсь, что какая-либо из них работает в Windows; если это действительно так, я бы попробовал Cygwin ,

15
ответ дан 1 December 2019 в 03:35
поделиться

Это касается ввода-вывода, который по умолчанию буферизируется с помощью Python. Передайте интерпретатору параметр -u , чтобы отключить это поведение:

python -u producer.py | python consumer.py

Это решает проблему для меня.

6
ответ дан 1 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

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