2009-03-04 143 views
1

如何通過Python打印每個文件的以下內容?Python單行打印當前目錄中的每個文件

python -c "import sys;print '>>',sys.argv[1:]" | dir *.* 

具體想知道如何管入python -c。 DOS或Cygwin響應接受。

+1

似乎有比使用Python更好的方式來做到這一點... – 2009-03-04 23:47:18

+0

這不是真的在班輪上!除非你遵循一行代碼的非常laaaaax定義,空行也被計​​算在內! – hasen 2009-03-05 06:47:01

+0

你究竟在做什麼? dir *。*已經列出了它們,所以有什麼意義? – hasen 2009-03-05 09:02:21

回答

4

Y您可以通過讀取sys.stdin讀取管道 Python腳本的數據。例如:

ls -al | python -c "import sys; print sys.stdin.readlines()" 

這是不完全清楚你想要做什麼(也許我是愚蠢的)。這個混淆來自你的例子,它將數據從python腳本中傳出。

6
python -c "import os; print os.listdir('.')" 

如果要應用一些格式就像你在你的問題有,

python -c "import os; print '\n'.join(['>>%s' % x for x in os.listdir('.')])" 

如果你想使用管道,使用xargs

ls | xargs python -c "import sys; print '>>', sys.argv[1:]" 

或反引號:

python -c "import sys; print '>>', sys.argv[1:]" `ls` 
+1

謝謝,想知道如何管道。 – Luis 2009-03-04 23:48:28

4

如果你要打印所有文件:如果你想如果你想包括「>>」之前各只打印在當前目錄中的文件

find . -type f -maxdepth 1 

find . -type f 

line

find . -type f -maxdepth 1 | xargs -L 1 echo ">>" 

如果你不想在「>」之間的空格, >「和$回聲的路徑

find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n" 

當然這都是使用cygwin的。

+0

+1 - python很不錯(我是一個粉絲),但有時候有些工具只是爲了完成這項工作而已:-) – 2009-03-05 00:47:24

3
ls | python -c "import sys; print sys.stdin.read()" 

剛讀標準輸入作爲正常的管道

2

想知道如何管,雖然

你有管道以錯誤的方式,如果你想喂輸出'dir'導入Python,'dir'必須在左邊。例如:

dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]" 

(與列表理解的黑客是因爲你不允許塊引入一個分號後「的」語句在一行。)

顯然Python的本地解決方案('os.listdir')在實踐中要好得多。

1

特別想知道如何管到一個Python -c

看到cobbal's answer

管道通過程序是從視節目的點透明,所有的程序都知道的是,它從標準輸入流獲得輸入

一般來說,一個shell命令的形式爲

A | B 

重定向A的輸出爲B的

所以如果A吐出「ASDF」標準輸出,則B被「ASDF」到它的標準輸入

在python標準輸入流輸入是sys.stdin

相關問題