2016-01-09 3 views
0

Моя цель - написать один лайнер для извлечения URL-адресов из текста. Проблема в том, что я даже не могу читать данные из STDIN. Мои эксперименты до сих пор:Python один вкладыш для извлечения url из текста

└──> grep -i http: flashgot.log | python -c 'import sys; import re; for line in sys.stdin: print line' 
    File "<string>", line 1 
    import sys; import re; for line in sys.stdin: print line 
          ^
SyntaxError: invalid syntax 


└──> grep -i http: flashgot.log | python -c 'import sys; import re; x = [print line for line in sys.stdin]' 
    File "<string>", line 1 
    import sys; import re; x = [print line for line in sys.stdin] 
            ^
SyntaxError: invalid syntax 

Второй план был использовать некоторые советы от hereherehere или here

+0

Python - это пробел. Также нет точек с запятой –

+0

, не знаю, каковы ваши ограничения, но вы можете использовать pickle для загрузки и выполнения произвольного кода в одной строке –

+0

. Моя цель - написать быстрый и грязный скрипт, не забирая его на HDD или что-то еще. –

ответ

1

Я получил свой фрагмент кода работает с помощью sys.stdout.write вместо print:

grep -i http: flashgot.log | python -c 'import sys; import re; [sys.stdout.write("%s\n" % line) for line in sys.stdin]' 

I думаю, проблема заключалась не в чтении stdin, а в поиске правильного синтаксиса для использования в одной строке. При попытке ваших сценариев выглядит так: for не работает как блок в однострочном синтаксисе, и ни один из print в генераторе списка.

PS: При попытке однострочных функций я нахожу, что иногда бывает полезно использовать lambda. Возможно, вы сочтете это полезным позже в своем скрипте

+1

'print' будет работать в python3 –

+0

Спасибо. Есть ли способ, как явно установить начало и конец блока? –

+0

@ WakanTanka Не знаю, о чем я знаю: я тоже просто экспериментирую; Мне еще не удалось найти документацию по однострочным ... – Hippo

Смежные вопросы