Was ist der Unterprozess.Popen maximale Länge des Parameters args?

ich benutzePopen Funktion aus dem Unterprozessmodul zum Ausführen eines Befehlszeilentools:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

Das von mir verwendete Tool erstellt eine Liste der Dateien, die es dann verarbeitet. In einigen Fällen kann diese Liste von Dateien sehr lang sein. Gibt es eine Möglichkeit, die maximale Länge zu ermitteln, die der Parameter args haben kann? Bei einer großen Anzahl von Dateien, die an das Tool übergeben werden, wird der folgende Fehler angezeigt:

Traceback (most recent call last):
  File "dump_output_sopuids.py", line 68, in <module>
    uid_map = create_sopuid_to_path_dict_dcmdump(dicom_files)
  File "dump_output_sopuids.py", line 41, in create_sopuid_to_path_dict_dcmdump
    dcmdump_output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate(0)[0]
  File "c:\python26\lib\subprocess.py", line 621, in __init__
    errread, errwrite)
  File "c:\python26\lib\subprocess.py", line 830, in _execute_child
    startupinfo)
WindowsError: [Error 206] The filename or extension is too long

Gibt es eine allgemeine Möglichkeit, diese maximale Länge zu ermitteln? Ich habe folgenden Artikel auf msdn gefunden:Begrenzung der Befehlszeilenzeichenfolge für die Eingabeaufforderung (Cmd. Exe) aber ich möchte den Wert nicht hart codieren. Ich würde lieber den Wert zur Laufzeit abrufen, um den Befehl in mehrere Aufrufe aufzuteilen.

Ich verwende Python 2.6 unter Windows XP 64.

Bearbeiten: Codebeispiel hinzufügen

paths = ['file1.dat','file2.dat',...,'fileX.dat']
cmd = ['process_file.exe','+p'] + paths
cmd_output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate(0)[0]

Das Problem tritt auf, weil jeder tatsächliche Eintrag in derpaths list ist normalerweise ein sehr langer Dateipfad UND es gibt mehrere tausend von ihnen.

Es macht mir nichts aus, den Befehl in mehrere Aufrufe zu zerlegenprocess_file.exe. Ich suche nach einer allgemeinen Methode, um die maximale Länge zu ermitteln, die args haben kann, damit ich weiß, wie viele Pfade für jeden Lauf gesendet werden müssen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage