Python单行打印当前目录中的每个文件

发布于 2024-07-14 03:53:09 字数 180 浏览 5 评论 0原文

我怎样才能让下面的一行通过Python打印每个文件?

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

特别想知道如何通过管道输入 python -c。 接受 DOS 或 Cygwin 响应。

How can I make the following one liner print every file through Python?

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

Specifically would like to know how to pipe into a python -c.
DOS or Cygwin responses accepted.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

请帮我爱他 2024-07-21 03:53:09
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`
python -c "import os; print os.listdir('.')"

If you want to apply some formatting like you have in your question,

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

If you want to use a pipe, use xargs:

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

or backticks:

python -c "import sys; print '>>', sys.argv[1:]" `ls`
彼岸花似海 2024-07-21 03:53:09

您可以通过读取 sys.stdin 来读取通过管道传输到 Python 脚本中的数据。 例如:

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

还不完全清楚你想做什么(也许我很愚蠢)。 混乱来自于您的示例,该示例将数据从 python 脚本中导出。

You can read data piped into a Python script by reading sys.stdin. For example:

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

It is not entirely clear what you want to do (maybe I am stupid). The confusion comes from your example which is piping data out of a python script.

凑诗 2024-07-21 03:53:09

如果您想打印所有文件:

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 的。

If you want to print all files:

find . -type f

If you want to print only the current directory's files

find . -type f -maxdepth 1

If you want to include the ">>" before each line

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

If you don't want the space between ">>" and $path from echo

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

This is all using cygwin, of course.

稚气少女 2024-07-21 03:53:09
ls | python -c "import sys; print sys.stdin.read()"

只需像正常管道一样读取标准输入

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

just read stdin as normal for pipes

浮生未歇 2024-07-21 03:53:09

想知道如何通过管道

您的管道方向错误,如果您想将“dir”的输出输入Python,“dir”必须位于左侧。 例如:(

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

列表理解的 hack 是因为不允许在分号后的一行上引入块“for”语句。)

显然,Python 原生解决方案(“os.listdir”)在以下方面要好得多实践。

would like to know how to pipe though

You had the pipe the wrong way round, if you wanted to feed the output of ‘dir’ into Python, ‘dir’ would have to be on the left. eg.:

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

(The hack with the list comprehension is because you aren't allowed a block-introducing ‘for’ statement on one line after a semicolon.)

Clearly the Python-native solution (‘os.listdir’) is much better in practice.

后来的我们 2024-07-21 03:53:09

特别想知道如何通过管道输入 python -c

请参阅 cobbal 的答案

通过程序进行管道传输对于从程序的角度来看,程序只知道它正在从标准输入流获取输入

一般来说,这种形式的 shell 命令

A | B

会将 A 的输出重定向为 B 的输入,

因此如果 A 将“asdf”吐出到标准输出,然后 B 将“asdf”获取到其标准输入中

python 中的标准输入流为 <代码>sys.stdin

Specifically would like to know how to pipe into a python -c

see cobbal's answer

piping through a program is transparent from the program's point of view, all the program knows is that it's getting input from the standard input stream

Generally speaking, a shell command of the form

A | B

redirects the output of A to be the input of B

so if A spits "asdf" to standard output, then B gets "asdf" into its standard input

the standard input stream in python is sys.stdin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文