如何通过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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top