xargs,python,从stdin读取文件

时间:2011-04-25 00:13:22

标签: python xargs

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

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

如何在xargs传递的每个文件上正确运行python?我做print sys.stdin而且它只是一个文件。我尝试for file in stdin循环,但那里什么都没有。我错过了什么?

2 个答案:

答案 0 :(得分:3)

实际上xargs没有传递给stdin。它将来自stdin的所有读取作为参数传递给您在参数中给出的命令。

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

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

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

所以实际上从python中的参数列表访问你的文件在你的脚本中使用它:

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

答案 1 :(得分:1)

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

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`

(“可能必须逃脱,不确定)

编辑:注意`和'

之间的区别