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).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |