Python OSError № 7 (список аргументов слишком длинный) в Linux - PullRequest
3 голосов
/ 23 января 2012

Я пытаюсь открыть новый подпроцесс, который примет несколько входных файлов и сгенерирует вывод в другом файле. Несмотря на то, что в большинстве случаев это работает чисто, когда я пытаюсь провести стресс-тестирование, это не помогает и выдает следующую ошибку:

File "/home/admin/Workspace/.metadata/.plugins/org.eclipse.pde.core/pde-junit/org.eclipse.osgipython/util/media_info.py", line 161, in external_process

    process = subprocess.Popen(command, shell=shell, close_fds=True, stderr=subprocess.PIPE)

  File "/usr/local/lib/python2.6/subprocess.py", line 623, in __init__
    errread, errwrite)

  File "/usr/local/lib/python2.6/subprocess.py", line 1141, in _execute_child
    raise child_exception

OSError: [Errno 7] Argument list too long

Сначала я думал, что команда, которую я передавал (это был абсолютный путь из 4 файлов), была длиннее, чем могла поддерживать ОС. Но даже после уменьшения абсолютного пути прошло 1/4 от исходного значения. Я все еще получаю эту ошибку. Обратите внимание, что я не получаю эту ошибку все время. В основном это после 1000 или более запусков, в то время как длина пути остается одинаковой для всех случаев.

1 Ответ

2 голосов
/ 26 октября 2012

strace - твой друг.Добавьте 2048, чтобы увидеть, что на самом деле происходит.Знание C поможет вам прочесть это, но вы все равно сможете выбирать длинные строки exec * без знания C.

http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...