python subprocess.call_python – subprocess.call不等待进程完成

问题是soffice命令行工具(libreoffice只是一个链接,或者是另一个包装器)只是真实程序soffice.bin的“控制器”.它找到soffice.bin的运行副本和/或创建on,告诉它做一些工作,然后退出.

因此,调用正在做正确的事情:它等待libreoffice退出.

但你不想等待libreoffice退出,你想等soffice.bin完成libreoffice要求它做的工作.

看起来你正在尝试做的事情是不可能直接做的.但它可以间接地做.

docs说无头模式:

… allows using the application without user interface.

This special mode can be used when the application is controlled by external clients via the API.

换句话说,在运行一些UNO字符串/进行一些转换/在命令行上指定的任何其他内容后,应用程序不会退出,它会等待来自外部的更多UNO命令,而启动器只是在发送时立即运行应用程序的相应命令.

您可能必须直接使用上述外部控制API(UNO).

有关基础知识,请参阅Scripting LibreOffice(尽管有关于内部脚本的信息比外部更多),有关详细信息和示例,请参阅API documentation.

但是可能有一个更简单的答案:unoconv是一个使用UNO API编写的简单命令行工具,它完全符合您的要求.如有必要,它会启动LibreOffice,发送一些命令,等待结果,然后退出.因此,如果您只使用unoconv而不是libreoffice,则只需拨打电话即可.

另请注意,unoconv是用Python编写的,旨在用作模块.如果您只是导入它,您可以编写自己的(更简单,特定于用例)代码来替换“Main entrance”代码,而根本不使用子进程. (或者,当然,您可以撕开模块并自己使用相关代码,或者只是将它用作从Python中使用UNO的非常好的示例代码.)

此外,上面链接的unoconv页面列出了各种其他类似工具,一些通过UNO工作,一些不工作,所以如果它不适合你,请尝试其他工具.

如果没有其他工作,你可以考虑,例如,创建一个sentinel文件和使用文件系统监视,所以至少你将能够准确地检测它何时完成其工作,而不必猜测超时.但这是一个真正的最后沟渠解决方案,在消除所有其他选项之前,您甚至不应该考虑这个问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值