加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python’sys.argv’是否限制了最大参数数量?

发布时间:2020-12-20 12:27:46 所属栏目:Python 来源:网络整理
导读:我有一个需要处理大量文件的 Python脚本.为了解决Linux对可以传递给命令的参数数量的相对较小的限制,我使用find -print0和xargs -0. 我知道另一个选择是使用Python的glob模块,但是当我有一个更高级的find命令,寻找修改时间等时,这将无济于事. 在大量文件上运
我有一个需要处理大量文件的 Python脚本.为了解决Linux对可以传递给命令的参数数量的相对较小的限制,我使用find -print0和xargs -0.

我知道另一个选择是使用Python的glob模块,但是当我有一个更高级的find命令,寻找修改时间等时,这将无济于事.

在大量文件上运行我的脚本时,Python只接受参数的一个子集,这是我首先想到的在argparse中的限制,但似乎在sys.argv中.我找不到任何关于此的文件.这是一个错误吗?

这是一个Python脚本示例,说明了这一点:

import argparse
import sys
import os

parser = argparse.ArgumentParser()
parser.add_argument('input_files',nargs='+')
args = parser.parse_args(sys.argv[1:])

print 'pid:',os.getpid(),'argv files',len(sys.argv[1:]),'argparse files:',len(args.input_files)

我有很多文件可以运行:

$find ~/ -name "*" -print0 | xargs -0 ls > filelist
748709 filelist

但它似乎是xargs或Python正在分块我的大文件列表并使用几个不同的Python运行处理它:

$find ~/ -name "*" -print0 | xargs -0 python test.py
pid: 4216 argv files 1819 number of files: 1819
pid: 4217 argv files 1845 number of files: 1845
pid: 4218 argv files 1845 number of files: 1845
pid: 4219 argv files 1845 number of files: 1845
pid: 4220 argv files 1845 number of files: 1845
pid: 4221 argv files 1845 number of files: 1845
...

为什么要创建多个进程来处理列表?为什么它会被分块呢?我不认为文件名中有换行符,-print0和-0不应该处理这个问题?如果有换行符,我希望sed -n’1810,1830p’文件列表显示上述示例的一些奇怪之处.是什么赋予了?

我差点忘了:

$python -V
Python 2.7.2+

解决方法

默认情况下,xargs将会对您的参数进行分块.看看xargs的–max-args和–max-chars选项.它的手册页也解释了限制(低于-max-chars).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读