loadComponentFromURL يقع مرارا ويموت، كوميديا ​​القيام CPR؟

StackOverflow https://stackoverflow.com/questions/301239

سؤال

وحسنا اختبار برنامج جيثون بلدي، أن يفعل بعض أنيق [ ". XLS"، ".DOC"، ".RTF"، ". TIF"، "و tiff"، "قوات الدفاع الشعبي" الملفات] -> قوات الدفاع الشعبي ( ملف وسيط) - تحويل> معرض طرابلس (الناتج النهائي) باستخدام مكتب فتح. ابتعدنا عن مايكروسوفت أوفيس بسبب المشاكل التي أجريناها مع الأتمتة. الآن يبدو أننا قد ترسيتها العديد من زجاجات المتعلقة تظهر أخطاء سدادة مع زجاجة واحدة المتبقية. توقف OO بعد حين.

ويحدث ذلك حيث ترى هذا الخط "<<<<<<<<<<<<" في كود

ما هي الطريقة الصحيحة بالنسبة لي للتعامل مع عملية فتح مكتب المتوقفة. هل يمكن أن يرجى توفير روابط مفيدة، وتعطيني اقتراح جيد على طريقة للخروج.
أيضا سؤال واحد.

وخلاصة القول:
* كيفية التعامل مع مثيل فتح مكتب المتوقفة منتديات * كيفية جعل التحويل مع مقطوعة الرأس جافا، لذلك أنا لا أميل لها واجهة المستخدم الرسومية ظهرت في كل وقت إضاعة الذاكرة.
* أيضا أي اقتراحات عامة حول رمز الجودة، تحسينات ومعايير الترميز العامة سيتم أكثر تقدير.


وTraceback (مشاركة الأعمق):
  ملف "dcmail.py"، خط 184، في منتديات   ملف "dcmail.py"، خط 174، في
الرئيسي   الملف "C: \ DCMail \ digestemails.py"، خط 126، في process_inbox
  ملف "C: \ DCMail \ digestemails.py"، خط 258، في _convert
  الملف "C: \ DCMail \ digestemails.py"، خط 284، في _choose_conversion_type
  ملف "C: \ DCMail \ digestemails.py"، خط 287، في _open_office_convert
  ملف "C: \ DCMail \ digestemails.py"، خط 299، في _load_attachment_to_convert
com.sun.star.lang.DisposedException: java.io.EOFException
        في com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge $ MessageDi spatcher.run (java_remote_bridge.java:176)

وcom.sun.star.lang.DisposedException: com.sun.star.lang.DisposedException: java.i o.EOFException

وفقط لتوضيح هذا الاستثناء يرمي فقط عندما قتل عملية فتح مكتب. وإلا فإن البرنامج ينتظر فقط لفتح مكتب لإكمال. إلى أجل غير مسمى


والقانون (مع به كود غير الوظيفية)

[كود]

<اقتباس فقرة>   <اقتباس فقرة>
#ghost script handles these file types  
GS_WHITELIST=[".pdf"]  
#Open Office handles these file types  
OO_WHITELIST=[".xls", ".doc", ".rtf", ".tif", ".tiff"]   
#whitelist is used to check against any unsupported files.  
WHITELIST=GS_WHITELIST + OO_WHITELIST   
  
def _get_service_manager(self):
    try:
        self._context=Bootstrap.bootstrap();
        self._xMultiCompFactory=self._context.getServiceManager()
        self._xcomponentloader=UnoRuntime.queryInterface(XComponentLoader, self._xMultiCompFactory.createInstanceWithContext("com.sun.star.frame.Desktop", self._context))
    except:
        raise OpenOfficeException("Exception Occurred with Open Office")

def _choose_conversion_type(self,fn):
    ext=os.path.splitext(fn)[1]
    if ext in GS_WHITELIST:
        self._ghostscript_convert_to_tiff(fn)
    elif ext in OO_WHITELIST:
        self._open_office_convert(fn)

def _open_office_convert(self,fn):
    self._load_attachment_to_convert(fn)
    self._save_as_pdf(fn)
    self._ghostscript_convert_to_tiff(fn)

def _load_attachment_to_convert(self, file):
    file=self._create_UNO_File_URL(file)
    properties=[]
    p=PropertyValue()
    p.Name="Hidden"
    p.Value=True
    properties.append(p)
    properties=tuple(properties) 
    self._doc=self._xcomponentloader.loadComponentFromURL(file, "_blank",0, properties) <<<<<<<<<<<<<<< here is line 299

def _create_UNO_File_URL(self, filepath):
    try:
        file=str("file:///" + filepath)
        file=file.replace("\\", "/")
    except MalformedURLException, e:
        raise e
    return file

def _save_as_pdf(self, docSource):
    dirName=os.path.dirname(docSource)
    baseName=os.path.basename(docSource)
    baseName, ext=os.path.splitext(baseName)
    dirTmpPdfConverted=os.path.join(dirName + DIR + PDF_TEMP_CONVERT_DIR)
    if not os.path.exists(dirTmpPdfConverted):
        os.makedirs(dirTmpPdfConverted)
    pdfDest=os.path.join(dirTmpPdfConverted + DIR + baseName + ".pdf")
    url_save=self._create_UNO_File_URL(pdfDest)
    properties=self._create_properties(ext)
    try:
        try:
            self._xstorable=UnoRuntime.queryInterface(XStorable, self._doc);
            self._xstorable.storeToURL(url_save, properties)
        except AttributeError,e:
                self.logger.info("pdf file already created (" + str(e) + ")")
                raise e
    finally:
        try:
            self._doc.dispose()
        except:
            raise

def _create_properties(self,ext):
    properties=[]
    p=PropertyValue()
    p.Name="Overwrite"
    p.Value=True
    properties.append(p)
    p=PropertyValue()
    p.Name="FilterName"
    if   ext==".doc":
        p.Value='writer_pdf_Export'
    elif ext==".rtf":
        p.Value='writer_pdf_Export'
    elif ext==".xls":
        p.Value='calc_pdf_Export'
    elif ext==".tif":
        p.Value='draw_pdf_Export'
    elif ext==".tiff":
        p.Value='draw_pdf_Export'
    properties.append(p)
    return tuple(properties)

def _ghostscript_convert_to_tiff(self, docSource):
    dest, source=self._get_dest_and_source_conversion_file(docSource)
    try:
        command = ' '.join([
            self._ghostscriptPath + 'gswin32c.exe',
           '-q',
           '-dNOPAUSE',
           '-dBATCH',
           '-r500',
           '-sDEVICE=tiffg4',
           '-sPAPERSIZE=a4',
           '-sOutputFile=%s %s' % (dest, source),
           ])
        self._execute_ghostscript(command)
        self.convertedTifDocList.append(dest)
    except OSError, e:
        self.logger.info(e)
        raise e
    except TypeError, (e):
        raise e
    except AttributeError, (e):
        raise e
    except:
        raise

[/ كود]

هل كانت مفيدة؟

المحلول

والحل رديء هو أن يكون هناك رصد لعملية أوبن أوفيس. إذا الشاشة يعرف PID وامتيازات، فإنه يمكن الحصول على وقت وحدة المعالجة المركزية المستخدمة كل بضع ثوان. إذا توقف OO في حالة توقف (أي أكثر CPU)، ثم رصد يمكن أن تقتل ذلك.

وأسهل طريقة للتعامل مع هذا هو أن يكون "المجمع" وهذا ما يطلقون مهمة فتح مكتب مشاهدته أثناء تشغيله وقتله عندما توقف. عملية الأصل له علاقة الانتظار على أي حال، لذلك قد رصد كذلك.

إذا توقف OpenOffuce في حلقة، ثم انها أكثر صرامة على الفور. وحدة المعالجة المركزية وعادة ما يذهب من خلال السقف، يبقى هناك، والأولوية الشواقيل إلى أدنى قدر ممكن من الأولوية. معالجة أو معلقة؟ دعوة الحكم. لديك على السماح لها شنق مثل هذا ل "بعض الوقت" (اختيار مدة عشوائية، 432 ثانية (3 اثني عشر اثني عشر) على سبيل المثال، عليك أن تكون دائما ثاني التخمين نفسك).

نصائح أخرى

وOpenOffice.org يحتوي على معلمة "-headless" لتشغيله بدون واجهة المستخدم الرسومية. لست متأكدا من هذا يحرر فعليا كافة الموارد التي ستنفق على واجهة المستخدم الرسومية. وهنا كيف يمكنني تشغيل بلدي من جانب الخادم المثال مقطوعة الرأس:

soffice -headless -accept="socket,port=1234;urp" -display :25

وأنا لا أستطيع أن أقول ما يسبب مشاكل توقف لبيثون السيناريو الخاص بك، ولكنك قد ترغب في التحقق من <لأ href = "http://www.artofsolving.com/opensource/pyodconverter" يختلط = "نوفولو noreferrer "> PyODConverter ، ونرى ما يفعله هذا السيناريو بشكل مختلف ربما للقبض على خطأ تسبب مشكلة لديك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top