timxx / pywpsrpc

Python bindings for WPS Office RPC (for Linux)
MIT License
219 stars 44 forks source link

强杀excel进程,再通过rpc调起wps进程,返回还是老对象,操作这个对象崩溃 #84

Open guohailin0323 opened 10 months ago

guohailin0323 commented 10 months ago
   代码示例:
    hr, rpc_excel = createEtRpcInstance()
    hr, app_excel = rpc_excel.getEtApplication()

    # 强杀excel进程
    processName = "et"
    kill_process(processName)

    hr, rpc_excel1 = createEtRpcInstance()
    hr, app_excel2 = rpc_excel1.getEtApplication()
    # 返回的rpc_excel1、app_excel2还是老对象,下面这行代码必崩!!!!!!!
    app_excel2.Visible = False

    我猜测哪个地方有缓存

    问题二:
    createEtRpcInstance getEtApplication源码在哪里能看到

   【环境】 
    pywpsrpc:v2.3.9
   信创amd64
   wps:v11.1.0.11704
timxx commented 10 months ago

官方的c++ sdk就是这样子的,内部估计是有个静态变量,只能用一次

guohailin0323 commented 9 months ago

官方的c++ sdk就是这样子的,内部估计是有个静态变量,只能用一次

即使有静态变量,强杀进程后,也不存在了。 再次调用接口createEtRpcInstance、getEtApplication返回是新对象才对,返回老的理解不了。 除非强杀进程时,少杀进程了。

timxx commented 9 months ago

官方的c++ sdk就是这样子的,内部估计是有个静态变量,只能用一次

即使有静态变量,强杀进程后,也不存在了。 再次调用接口createEtRpcInstance、getEtApplication返回是新对象才对,返回老的理解不了。 除非强杀进程时,少杀进程了。

变量是在sdk模块的吧,这个不是wps进程加载的(python这边) 不过可以研究研究这个模块能不能卸载重新加载,估计不太好整,现在都是sip那边自动做的

mjTree commented 9 months ago
   代码示例:
    hr, rpc_excel = createEtRpcInstance()
    hr, app_excel = rpc_excel.getEtApplication()

    # 强杀excel进程
    processName = "et"
    kill_process(processName)

    hr, rpc_excel1 = createEtRpcInstance()
    hr, app_excel2 = rpc_excel1.getEtApplication()
    # 返回的rpc_excel1、app_excel2还是老对象,下面这行代码必崩!!!!!!!
    app_excel2.Visible = False

    我猜测哪个地方有缓存

    问题二:
    createEtRpcInstance getEtApplication源码在哪里能看到

   【环境】 
    pywpsrpc:v2.3.9
   信创amd64
   wps:v11.1.0.11704

kill进程之后,需要把你的rpc_excel、app_excel对象回收后再去新建才行的

guohailin0323 commented 9 months ago
   代码示例:
    hr, rpc_excel = createEtRpcInstance()
    hr, app_excel = rpc_excel.getEtApplication()

    # 强杀excel进程
    processName = "et"
    kill_process(processName)

    hr, rpc_excel1 = createEtRpcInstance()
    hr, app_excel2 = rpc_excel1.getEtApplication()
    # 返回的rpc_excel1、app_excel2还是老对象,下面这行代码必崩!!!!!!!
    app_excel2.Visible = False

    我猜测哪个地方有缓存

    问题二:
    createEtRpcInstance getEtApplication源码在哪里能看到

   【环境】 
    pywpsrpc:v2.3.9
   信创amd64
   wps:v11.1.0.11704

kill进程之后,需要把你的rpc_excel、app_excel对象回收后再去新建才行的

试了下,是可以的

wenfer commented 4 months ago

我之前也遇到过类似问题,del app_excel 后就行了

Teccivil commented 2 months ago
   代码示例:
    hr, rpc_excel = createEtRpcInstance()
    hr, app_excel = rpc_excel.getEtApplication()

    # 强杀excel进程
    processName = "et"
    kill_process(processName)

    hr, rpc_excel1 = createEtRpcInstance()
    hr, app_excel2 = rpc_excel1.getEtApplication()
    # 返回的rpc_excel1、app_excel2还是老对象,下面这行代码必崩!!!!!!!
    app_excel2.Visible = False

    我猜测哪个地方有缓存

    问题二:
    createEtRpcInstance getEtApplication源码在哪里能看到

   【环境】 
    pywpsrpc:v2.3.9
   信创amd64
   wps:v11.1.0.11704

kill进程之后,需要把你的rpc_excel、app_excel对象回收后再去新建才行的

试了下,是可以的

请问一下是用什么方式进行的回收,del吗?