如何使用 LibreOffice 宏将 os.system() 命令写入 python 脚本并执行它?

Posted

技术标签:

【中文标题】如何使用 LibreOffice 宏将 os.system() 命令写入 python 脚本并执行它?【英文标题】:How to write os.system() commands to a python script using LibreOffice Macros and execute it? 【发布时间】:2021-03-19 05:56:05 【问题描述】:

我是宏的新手。

目标:

在系统本地制作 python 脚本并向其添加代码(以生成 shell),最后使用 LibreOffice 宏执行脚本。

代码:

Sub Main

    Shell("bash -c 'touch openshell.py'")
    Shell("bash -c 'echo import os > openshell.py'")
    Shell("bash -c 'echo os.system("gnome-terminal 'sudo apt-get update'") >> openshell.py'")
    Shell("bash -c 'python -m openshell.py'")

    
End Sub

错误:

BASIC syntax error.
Parentheses do not match.

有趣的是,openshell.py 脚本已创建,并且 import os 命令正在运行

但是Shell("bash -c 'echo os.system("gnome-terminal 'sudo apt-get update'") >> openshell.py'")中的"转义存在问题

如何正确转义并将上述python代码添加到已经创建的openshell.py中,使用宏不出错并执行?

【问题讨论】:

这只是一个语法错误 - 查看您问题中的代码图像。你有看到?代码格式化程序是否以不同的颜色突出显示了 gnome-terminal 这个词?这就是消息“括号不匹配”所说的 - 双引号中的字符串内的双引号必须指定两次。 Shell("bash -c 'echo os.system(""gnome-terminal 'sudo apt-get update'"") >> openshell.py'") 谢谢,我想这是可行的,因为我运行代码没有产生错误。但是当我打开 openshell.py 时,命令 os.system("gnome-terminal 'sudo apt-get update'") 不存在,只有 import os 存在。为什么不将代码附加到您的 py 脚本以及如何执行它。你能把它作为答案,如果它有效,我可以投票给答案吗? 也许Shell (bash echo ...) 不是创建文件的最佳方式。查看example 也可以试试双单引号(撇号)。我的意思是,可能'sudo apt-get update' 应该写成''sudo apt-get update''——这只是一个假设。使用“经典”基本技术创建文本文件的建议仍然有效。 这是个坏主意,可能是一个严重的安全问题。 python 脚本应单独交付,允许用户自行安装,并能够先检查它。是什么阻止您创建一个显示rm -r * 的即时脚本?我不是建议你这样做,但可能性是存在的。 【参考方案1】:

Basic 中的字符串和文件处理语法很棘手。好消息是 LibreOffice 宏可以用 python 编写。使用APSO 运行以下宏。

def create_and_run_script():
    filename = "path/to/openshell.py"
    with open(filename, 'w') as out_file:
        out_file.write("""
import os
os.system("gnome-terminal 'sudo apt-get update'")
""")

然后看What is the best way to call a script from another script?。

但是,这似乎不必要地复杂。下面的代码是一个完全合法的宏,可以使用 APSO 或 Tools -> Macros -> Run Macro 运行。

import os

def do_update():
    os.system("gnome-terminal 'sudo apt-get update'")

【讨论】:

以上是关于如何使用 LibreOffice 宏将 os.system() 命令写入 python 脚本并执行它?的主要内容,如果未能解决你的问题,请参考以下文章

LibreOffice Calc 宏将命名工作表保存在 csv 文件中

Libreoffice calc 宏将当前日期 + 14 天放入单元格

LibreOffice XForm:如何使用 javascript 宏读取表单数据

libreOffice 命令行宏不返回输出或错误

更快的单元格输入值 LibreOffice Vba

从 Base (Libreoffice) 中的宏中获取按钮