xargs,python,从stdin读取文件
在一个有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