Tôi đang sử dụng Popen chức năng từ mô-đun subprocess để thực hiện một công cụ dòng lệnh:subprocess.Popen chiều dài tối đa của tham số args là gì?
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)
Các công cụ tôi đang sử dụng có một danh sách các tập tin mà nó thì quá trình này. Trong một số trường hợp, danh sách tệp này có thể rất dài. Có cách nào để tìm chiều dài tối đa mà tham số args có thể được? Với một số lượng lớn tệp được chuyển đến công cụ, tôi nhận được lỗi sau:
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
Có cách nào chung để tìm độ dài tối đa này? Tôi tìm thấy bài viết sau trên msdn: Command prompt (Cmd. exe) command-line string limitation nhưng tôi không muốn mã cứng trong giá trị. Tôi thà nhận được giá trị tại thời gian chạy để chia lệnh thành nhiều cuộc gọi.
Tôi đang sử dụng Python 2.6 trên Windows XP 64.
Edit: thêm mã ví dụ
paths = ['file1.dat','file2.dat',...,'fileX.dat']
cmd = ['process_file.exe','+p'] + paths
cmd_output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate(0)[0]
Vấn đề xảy ra vì mỗi mục thực tế trong danh sách paths
thường là một đường dẫn tập tin rất dài và có là vài nghìn trong số đó.
Tôi không ngại chia lệnh thành nhiều cuộc gọi đến process_file.exe
. Tôi đang tìm một cách tổng quát để có được chiều dài tối đa mà args có thể được vì vậy tôi biết có bao nhiêu đường dẫn để gửi cho mỗi lần chạy.
bạn có thể cung cấp giá trị mẫu cho những gì bạn cung cấp cho arg không? –
Tôi khá muộn với bữa tiệc nhưng tôi muốn thêm rằng tôi đã nhận được cùng một lỗi do biến môi trường PATH của tôi trở nên quá dài sau khi thêm nhiều mục. – RedX