2016-01-09 83 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 

第二個計劃是利用一些建議從herehereherehere

+0

Python是空格分隔的。也沒有分號 –

+0

不確定你的限制是什麼,但你可以使用pickle在一行中加載和執行任意代碼 –

+0

我的目標是編寫快速和骯髒的腳本,而不需要將它存儲在硬盤或其他東西上。 –

回答

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]' 

我認爲問題不在於閱讀stdin,而是在於找到在一行上使用的正確語法。在嘗試腳本時,看起來for在單行語法中不能用作塊,在列表生成器中也不能用作print

PS:在嘗試單線功能時,我發現lambda有時會派上用場。稍後在腳本中可能會發現它很有用

+1

'print'會在python3中工作 –

+0

謝謝。有沒有辦法明確設置塊的開始和結束? –

+0

@WakanTanka不是我所知道的:我也只是在試驗;我還沒有設法找到任何有關單線的文件...... – Hippo