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