xargs,python,从stdin读取文件

0 投票
2 回答
4277 浏览
提问于 2025-04-16 16:21

在一个有30个CSV文件的文件夹里,运行:

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

我该怎么让Python正确地处理每个通过xargs传递过来的文件呢?我用print sys.stdin打印出来,结果只显示了一个文件。我试着用for file in stdin循环,但里面什么也没有。我漏掉了什么呢?

2 个回答

1

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`

(可能需要对"进行转义,不太确定)

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

3

其实,xargs 并不是把内容传给标准输入(stdin)。它是把从标准输入读取的所有内容作为参数传递给你指定的命令。

你可以用 echo 来调试你的命令调用:

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

这样你会看到所有的文件名都在一行上输出。

所以,实际上要在 Python 脚本中访问这些文件的参数列表,可以使用下面的代码:

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

撰写回答