2016-02-22 63 views
0

我正在編寫一個python工具,它可以通過subprocess進行一些處理,數據收集並最終調用一個bash腳本。如何在Python文件中對bash腳本進行硬編碼

我的工具的棘手部分是:我使用nuitka編譯python文件到單個二進制文件。我這樣做是因爲我不希望我的用戶添加任何功能,我希望我的工具很神祕。

問題當然是,如何處理該bash腳本。現在,我將它們與我的nuitka-ed二進制文件一起存儲。但是,由於上述原因,我不想讓bash腳本容易訪問。

現在,我可以看到兩個選項對我來說:

  1. 我可以編譯*.sh文件,並與nuitka-ED二進制將它們鏈接。
  2. 我可以在*.py文件中硬編碼*.sh文件。

選項1由於其複雜性而不是選項。選項2稍微好一點,但現在,我的最佳解決方案是以下幾點:

我做script.py

""" 
#!/bin/bash 

ls -alh /var 
echo $? 
# (...) 
""" 

我注入script.__doc__subprocess.Popen(['bash(...)

有什麼更好的 - 更優雅的方式來實現我的目標,同時保持bash腳本的可讀性?

+1

我不知道你的腳本是代表你想要做什麼,但是該功能可以很容易地用Python來實現......看到'os.listdir()'或者可能是'水珠'模塊。既然你想阻止檢查/修改shell腳本,那麼在bash中編寫它有什麼好處,爲什麼不直接在Python中實現? – mhawke

+0

用戶仍然可以在程序上運行'strace'或'ltrace'來查看正在進行的呼叫。在程序中嵌入字符串的腳本可以使用'strings(1)'找到。如果用戶足夠確定,並且他們可以讀取文件,除了混淆之外,您可以做的事情並不多,並且忘記了使用bash。 – cdarke

+0

我的bash腳本超過200行,所以不硬編碼不是一個選項。說'strace','ltrace','strings'什麼的,我知道用戶可以這樣做,但我們談論內部的公司工具,所以用戶懶得不去潛入二進制。 – Scony

回答

0

要在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) 
+0

我需要硬編碼腳本,而不是命令! – Scony

相關問題