【问题标题】:xargs, python, reading files from stdinxargs,python,从标准输入读取文件
【发布时间】:2011-04-25 11:08:39
【问题描述】:

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

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

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

【问题讨论】:

  • 回答我自己的问题。 fileinput 模块是您想要的位置:docs.python.org/library/fileinput.html
  • 在 Python 脚本中使用 fileinput,您根本不需要使用任何 shell 命令。

标签: python xargs


【解决方案1】:

事实上 xargs 并没有传递给标准输入。它将从标准输入读取的所有内容作为参数传递给您在参数中提供的命令。

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

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

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

所以实际上要从 python 中的参数列表访问您的文件,请在您的脚本中使用:

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

【讨论】:

    【解决方案2】:

    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`
    

    (“可能必须转义,不确定)

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

    【讨论】:

      最近更新 更多