如何在python文件中硬编码bash脚本

如何在python文件中硬编码bash脚本,python,bash,Python,Bash,我正在编写一个python工具,它可以进行一些处理、数据收集,并最终通过子流程调用bash脚本 我的工具的棘手部分是:我使用nuitka将python文件编译成单个二进制文件。我这样做是因为我不希望我的用户添加任何功能,而且我希望我的工具是神秘的 当然,问题是如何处理bash脚本。现在,我将它们与我的nuitka ed二进制文件一起存储。然而,由于上述原因,我不希望bash脚本能够如此容易地访问 目前,我可以看到两种选择: 我可以编译*.sh文件,并将它们与nuitka ed二进制文件链接 我可

我正在编写一个python工具,它可以进行一些处理、数据收集,并最终通过
子流程
调用bash脚本

我的工具的棘手部分是:我使用nuitka将python文件编译成单个二进制文件。我这样做是因为我不希望我的用户添加任何功能,而且我希望我的工具是神秘的

当然,问题是如何处理bash脚本。现在,我将它们与我的nuitka ed二进制文件一起存储。然而,由于上述原因,我不希望bash脚本能够如此容易地访问

目前,我可以看到两种选择:

  • 我可以编译
    *.sh
    文件,并将它们与nuitka ed二进制文件链接
  • 我可以在
    *.py
    文件中硬编码
    *.sh
    文件
  • 选项
    1
    由于其复杂性而不是选项。选项
    2
    稍好一些,但目前,我的最佳解决方案如下:

    我制作
    script.py

    """
    #!/bin/bash
    
    ls -alh /var
    echo $?
    # (...)
    """
    
    我将
    脚本注入
    子流程.Popen(['bash(…)


    在保持bash脚本可读性的同时,有没有更好更优雅的方法来实现我的目标?

    要在python文件中硬编码bash代码,可以这样做

    import subprocess
    import StringIO
    
    # In Python
    text = "foobar"
    
    your_bash_cmd = "echo "+text
    process = subprocess.Popen([your_bash_cmd], shell=True, stdout=subprocess.PIPE)
    process.wait()
    your_bash_output = process.stdout.read()
    
    # Process bash output in python
    print(your_bash_output)
    

    我不知道您的脚本是否代表了您正在尝试做的事情,但该功能可以很容易地在Python中实现……请参见
    os.listdir()
    或者可能是
    glob
    模块。既然您想防止检查/修改shell脚本,那么在bash中编写它有什么好处,为什么不直接在Python中实现它呢?用户仍然可以在您的程序上运行
    strace
    ltrace
    来查看正在进行的调用。脚本嵌入到pr中的字符串中可以使用
    字符串(1)找到图形
    。如果用户有足够的决心,并且他们对您的文件有读取权限,那么除了模糊处理和忘记使用bash之外,您没有什么可以做的。我的bash脚本超过200行,所以不硬编码不是一个选项。说
    strace
    ltrace
    strings
    无论什么,我知道用户可以这么做,但我们谈论内部的、公司的工具,所以用户懒得钻研二进制代码。