Ben bir komut satırı aracı çalıştırmak için alt işlemi modülünden Popen işlevi kullanıyorum:Alt işlem nedir.Args parametresinin maksimum uzunluğu nedir?
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)
kullanıyorum aracı dosyaları daha sonra süreçler bir listesini alır. Bazı durumlarda, bu dosya listesi çok uzun olabilir. Arc parametresinin olabileceği maksimum uzunluğu bulmanın bir yolu var mı?
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
bu maksimum uzunluğu bulmak için genel bir yolu var mı: dosyaların büyük sayıda aracına geçirilen, ben aşağıdaki hatayı alıyorum? Msdn: Command prompt (Cmd. exe) command-line string limitation ile ilgili şu makaleyi buldum ama değerindeki kodları zorlamak istemiyorum. Komutu birden fazla çağrıya bölmek için çalışma zamanında değeri almayı tercih ederim.
Windows XP üzerinde Python 2.6 kullanıyorum 64.
Düzenleme: ekleyerek kod örneği
paths = ['file1.dat','file2.dat',...,'fileX.dat']
cmd = ['process_file.exe','+p'] + paths
cmd_output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate(0)[0]
paths
listedeki her fiili giriş varsa genellikle çok uzun bir dosya yoludur VE nedeniyle sorun oluşur bunların binlerce var.
Komutu process_file.exe
numaralı çağrıya birden çok çağrıya ayırmaktan çekinmem. Her koşuda kaç yol gönderileceğini bildiğim, hataların olabileceği maksimum uzunluğu elde etmenin genel bir yolunu arıyorum.
Eğer args sağlamak şeyin bir örnek değer sağlayabilir? –
Partiye oldukça geç kaldım ama PATH ortam değişkenimin birçok giriş ekledikten sonra çok uzun olması nedeniyle aynı hatayı aldığımı eklemek istiyorum. – RedX