如何通过Python在每个文件中打印以下单行内容?
python -c "import sys;print '>>',sys.argv[1:]" | dir *.*
特别想知道如何管道进入python -c。 接受DOS或Cygwin的回应。
答案 0 :(得分: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 :(得分:4)
您可以通过读取sys.stdin来读取通过传输到 Python脚本中的数据。例如:
ls -al | python -c "import sys; print sys.stdin.readlines()"
你想做什么并不完全清楚(也许我很愚蠢)。混淆来自你的例子,它是从python脚本中输出数据。
答案 2 :(得分:4)
如果您要打印所有文件:
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。
答案 3 :(得分:3)
ls | python -c "import sys; print sys.stdin.read()"
只需正常读取stdin管道
答案 4 :(得分:2)
想知道怎么管道
你的管道方向错误,如果你想把'dir'的输出提供给Python,'dir'就必须在左边。例如:
dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"
(列表理解的黑客是因为你不允许在分号后的一行上引用'for'语句。)
显然,Python原生解决方案('os.listdir')在实践中要好得多。
答案 5 :(得分:1)
从程序的角度来看,程序管道是透明的,所有程序都知道它是从标准输入流中获取的输入特别想知道如何管道进入python -c
一般来说,形式为
的shell命令A | B
将A的输出重定向为B
的输入所以如果A将“asdf”吐出到标准输出,那么B将“asdf”输入其标准输入
python中的标准输入流是sys.stdin