Python one-liner打印当前目录中的每个文件
题
如何通过Python在每个文件中打印以下单行内容?
python -c "import sys;print '>>',sys.argv[1:]" | dir *.*
特别想知道如何管道进入python -c。 接受DOS或Cygwin的回应。
解决方案
您可以通过读取sys.stdin来读取通过传输到 Python脚本中的数据。例如:
ls -al | python -c "import sys; print sys.stdin.readlines()"
你想做什么并不完全清楚(也许我很愚蠢)。混淆来自你的例子,它是从python脚本中输出数据。
其他提示
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`
如果您要打印所有文件:
find . -type f
如果您只想打印当前目录的文件
find . -type f -maxdepth 1
如果您想要包含“>>”每行之前
find . -type f -maxdepth 1 | xargs -L 1 echo ">>"
如果您不希望“>>”之间的空格。和来自echo的$ path
find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n"
当然,这都是使用cygwin。
ls | python -c "import sys; print sys.stdin.read()"
只需正常读取stdin管道
想知道怎么管道
如果您想要输出‘ dir’进入Python,‘ dir’必须在左边。例如:
dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"
(列表理解的黑客是因为你不允许在分号后的一行上引用块引用语句。)
显然,Python原生解决方案(‘ os.listdir’)在实践中要好得多。
特别想知道如何管道进入python -c
请参阅 cobbal的回答
从程序的角度来看,程序管道是透明的,所有程序都知道它是从标准输入流中获取的输入一般来说,形式为
的shell命令A | B
将A的输出重定向为B
的输入所以,如果A吐出“asdf”,到标准输出,然后B获得“asdf”。进入其标准输入
python中的标准输入流是 sys.stdin 代码>
不隶属于 StackOverflow