【问题标题】:argument length is too big. How to chunk it up?参数长度太大。怎么分块?
【发布时间】:2014-06-08 01:54:07
【问题描述】:

我有这个 python 代码,它将接受一个文件名和一组偏移量(逗号分隔),并将读取在偏移量中定义的相应行。

do   
    python fileOffset.py /mnt/media1/file $offsets >> tmpfile
done

$offsets 将提供以逗号分隔的字符串,其中包含文件指针 (12,123,121134)。这工作正常,直到我得到一个非常长的偏移字符串,这将引发 argument list too long 错误。作为一种解决方案,我编写了以下代码,它将拆分偏移量并一对一地调用 fileOffset.py。

IFS=', ' read -a array <<< $offsets
for element in "${array[@]}"
do 
    python fileOffset.py /mnt/media1/$file $element >> tmpfile
done

但这会使文件的处理速度非常慢。我怎样才能让它更快?

【问题讨论】:

  • 在 python 中执行所有操作,因为您正在为array 中的每个元素生成一个新的 python 进程。如果帽子不喜欢你,看看xargs

标签: bash shell scripting arguments command-line-arguments


【解决方案1】:

你可以使用xargs

IFS=', ' xargs read -a array <<< $offset

但是,我同意@FrederikPihil 的评论:完全使用 python,因为您已经在每次迭代中生成了一个 python 进程。

【讨论】:

  • 即使我使用 xargs,我还会在每次迭代中生成 python 进程吗?如果是,使用 xargs 的目的是什么?
  • 如果参数列表太长,它会多次向read提供参数列表的块
  • 我尝试使用 xargs 然后它给了我一个“xargs:参数行太长”。唯一改变的是从长度到线。这是为什么呢?
  • 你如何填充$offset
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
相关资源
最近更新 更多