xargs,python,从标准输入读取文件

发布于 2024-11-03 07:22:36 字数 237 浏览 2 评论 0原文

在包含 30 个 CSV 文件的目录中,运行:

find . -name "*.csv" | (xargs  python ~/script.py)

如何让 python 在 xargs 传递的每个文件上正确运行?我打印 sys.stdin ,它只是一个文件。我尝试 for file in stdin 循环,但那里什么也没有。我缺少什么?

In a directory with 30 CSV files, running:

find . -name "*.csv" | (xargs  python ~/script.py)

How can I have python properly run on each file passed by xargs? I do print sys.stdin and it's just one file. I try for file in stdin loop, but there's nothing there. What am I missing?

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

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

发布评论

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

评论(2

思念满溢 2024-11-10 07:22:36

事实上 xargs 不会传递给 stdin。它将所有从 stdin 读取的内容作为参数传递给您在参数中给出的命令。

您可以使用 echo 来调试命令调用:

find . -name "*.csv" | (xargs echo python ./script.py)

您将看到所有文件都输出在一行上。

因此,实际上要从 python 中的参数列表访问文件,请在脚本中使用以下命令:

import sys
for argument in sys.argv[1:]:
    print argument

In fact xargs does not pass to stdin. It passes all its read from stdin as arguments to the command you give it in parameter.

You can debug your command invokation with an echo:

find . -name "*.csv" | (xargs echo python ./script.py)

You will see all your files outputed on one line.

So in fact to access your files from arguments list in python use this in your script:

import sys
for argument in sys.argv[1:]:
    print argument
偏爱你一生 2024-11-10 07:22:36

script.py 为每个 csv 文件运行一次

python ~/script.py file1.csv
python ~/script.py file2.csv
python ~/script.py file3.csv
python ~/script.py file4.csv

,等等

如果你想像

python ~/script.py file1.csv file2.csv file3.csv

那么

python ~/script.py `find . -name "*.csv"`

运行它或者

python ~/script.py `ls *.csv`

(“可能需要转义,不确定)

编辑:注意`和'之间的区别

script.py is being run exactly once for each csv file

python ~/script.py file1.csv
python ~/script.py file2.csv
python ~/script.py file3.csv
python ~/script.py file4.csv

etc

If you want to run it like

python ~/script.py file1.csv file2.csv file3.csv

then do

python ~/script.py `find . -name "*.csv"`

or

python ~/script.py `ls *.csv`

(the " may have to be escaped, not sure)

EDIT: note the difference between ` and '

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