bài đầu tiên vì vậy hãy loại xin vui lòng, tôi đã tìm kiếm rất nhiều xung quanh nhưng hầu hết mọi thứ tôi thấy có liên quan đến Python 2.Python3: UnicodeEncodeError chỉ khi chạy từ crontab
Tôi có một kịch bản Python3 rằng xây dựng một tập tin zip từ danh sách tệp; nó không thành công với UnicodeEncodeError chỉ khi kịch bản được chạy từ crontab, nhưng nó hoạt động hoàn hảo khi chạy từ bảng điều khiển tương tác. Tôi đoán có phải là một cái gì đó trong môi trường nhưng tôi chỉ có thể không có vẻ để tìm ra những gì.
Đây là trích đoạn mã:
def zipFileList(self, rootfolder, filelist, zip_file, logger):
count = 0
logger.info("Generazione file zip {0}: da {1} files".format(zip_file, len(filelist)))
zip = zipfile.ZipFile(zip_file, "w", compression=zipfile.ZIP_DEFLATED)
for curfile in filelist:
zip.write(os.path.join(rootfolder, curfile), curfile, zipfile.ZIP_DEFLATED)
count = count + 1
zip.close()
logger.info("Scrittura terminata: {0} files".format(count))
Và đây là dữ liệu ghi nhận cho đoạn mã này:
2012-07-31 09:10:03,033: root - ERROR - Traceback (most recent call last):
File "/usr/local/lib/python3.2/zipfile.py", line 365, in _encodeFilenameFlags
return self.filename.encode('ascii'), self.flag_bits
UnicodeEncodeError: 'ascii' codec can't encode characters in position 56-57: ordinal not in range(128)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "XBE.py", line 45, in main
pam.executeList(logger)
File "/home/vte/vtebackup/vte41/scripts/ptActivityManager.py", line 62, in executeList
self.executeActivity(act, logger)
File "/home/vte/vtebackup/vte41/scripts/ptActivityManager.py", line 71, in executeActivity
self.exAct_FileBackup(act, logger)
File "/home/vte/vtebackup/vte41/scripts/ptActivityManager.py", line 112, in exAct_FileBackup
ptfs.zipFileList(srcfolder, filelist, arcfilename, logger)
File "/home/vte/vtebackup/vte41/scripts/ptFileManager.py", line 143, in zipFileList
zip.write(os.path.join(rootfolder, curfile), curfile, zipfile.ZIP_DEFLATED)
File "/usr/local/lib/python3.2/zipfile.py", line 1115, in write
self.fp.write(zinfo.FileHeader())
File "/usr/local/lib/python3.2/zipfile.py", line 355, in FileHeader
filename, flag_bits = self._encodeFilenameFlags()
File "/usr/local/lib/python3.2/zipfile.py", line 367, in _encodeFilenameFlags
return self.filename.encode('utf-8'), self.flag_bits | 0x800
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc3' in position 56: surrogates not allowed
Đây là dòng crontab:
10 9 * * * /home/vte/vtebackup/vte41/scripts/runbackup.sh >/dev/null 2>&1
Và đây là nội dung của runbackup.sh:
#! /bin/bash -l
cd /home/vte/vtebackup/vte41/scripts
/usr/local/bin/python3.2 XBE.py
Các tập tin mà trên đó các ngoại lệ xảy ra luôn luôn là như nhau, nhưng nó dường như không bao gồm bất kỳ ký tự ascii phi:
/var/vhosts/vte41/http_docs/vtecrm41/storage/2012/July/week4/169933_Puccini_Gabriele.tif
OS là Linux Ubuntu LTS 10,04, Python phiên bản 3.2 (được cài đặt bên bên cạnh là cài đặt với các phiên bản Python khác). Tất cả Python file nguồn có công việc này
#!/usr/bin/env python3.2
dòng như đầu tiên
bạn có thể giúp tôi tìm thấy những gì là sai và làm thế nào để khắc phục vấn đề này?
Đối với một lý do không rõ khi zipfile cố gắng để mã hóa tên tập tin để nhúng thông tin trong nó, tên tập tin có một [unicode thay thế] (http://www.htmlescape.net/dc/unicode_char_dcc3 .html). Có thể một vấn đề hệ điều hành? Bạn có thể đăng nhập 'curfile' trong tập lệnh của mình không? – CharlesB