如何通过 Python 使以下一行打印每个文件?
python -c "import sys;print '>>',sys.argv[1:]" | dir *.*
具体想知道如何通过管道输入python -c。接受 DOS 或 Cygwin 响应。
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`
您可以通过读取 sys.stdin 来读取通过管道传输到Python 脚本中的数据。例如:
ls -al | python -c "import sys; print sys.stdin.readlines()"
目前还不完全清楚你想做什么(也许我很愚蠢)。混淆来自您的示例,该示例将数据从 python 脚本中传递出来。
如果要打印所有文件:
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()"
只需正常读取管道的标准输入
想知道如何管道虽然
你把管道弄错了,如果你想把'dir'的输出输入Python,'dir'必须在左边。例如。:
dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"
(使用列表理解的 hack 是因为您不允许在分号后的一行中使用块引入“for”语句。)
显然,Python 原生解决方案('os.listdir')在实践中要好得多。
具体想知道如何通过管道输入 python -c
从程序的角度来看,通过程序的管道是透明的,程序所知道的只是它从标准输入流中获取输入
一般来说,一个shell命令的形式
A | B
将 A 的输出重定向为 B 的输入
因此,如果 A 向标准输出吐出“asdf”,则 B 将“asdf”输入其标准输入
python中的标准输入流是sys.stdin