我正在編寫一個python工具,它可以通過subprocess
進行一些處理,數據收集並最終調用一個bash腳本。如何在Python文件中對bash腳本進行硬編碼
我的工具的棘手部分是:我使用nuitka編譯python文件到單個二進制文件。我這樣做是因爲我不希望我的用戶添加任何功能,我希望我的工具很神祕。
問題當然是,如何處理該bash腳本。現在,我將它們與我的nuitka-ed二進制文件一起存儲。但是,由於上述原因,我不想讓bash腳本容易訪問。
現在,我可以看到兩個選項對我來說:
- 我可以編譯
*.sh
文件,並與nuitka-ED二進制將它們鏈接。 - 我可以在
*.py
文件中硬編碼*.sh
文件。
選項1
由於其複雜性而不是選項。選項2
稍微好一點,但現在,我的最佳解決方案是以下幾點:
我做script.py
:
"""
#!/bin/bash
ls -alh /var
echo $?
# (...)
"""
我注入script.__doc__
到subprocess.Popen(['bash(...)
。
有什麼更好的 - 更優雅的方式來實現我的目標,同時保持bash腳本的可讀性?
我不知道你的腳本是代表你想要做什麼,但是該功能可以很容易地用Python來實現......看到'os.listdir()'或者可能是'水珠'模塊。既然你想阻止檢查/修改shell腳本,那麼在bash中編寫它有什麼好處,爲什麼不直接在Python中實現? – mhawke
用戶仍然可以在程序上運行'strace'或'ltrace'來查看正在進行的呼叫。在程序中嵌入字符串的腳本可以使用'strings(1)'找到。如果用戶足夠確定,並且他們可以讀取文件,除了混淆之外,您可以做的事情並不多,並且忘記了使用bash。 – cdarke
我的bash腳本超過200行,所以不硬編碼不是一個選項。說'strace','ltrace','strings'什麼的,我知道用戶可以這樣做,但我們談論內部的公司工具,所以用戶懶得不去潛入二進制。 – Scony