2010-07-10 17 views
0

比方說我設計的工具foobuzzle(foobuzzle的具體工作是建立SRPM文件交叉編譯各種代碼到自己的條塊前綴目錄,但是這並不重要)。我想foo​​buzzle參加由(智能,代碼精明的)客戶端,誰都會告訴foobuzzle他們如何想它來執行這些操作指定輸入文件(buzzle_input)。如何在當前目錄中執行Python/bash代碼作爲代碼的一部分?

我用Python寫foobuzzle,這似乎是有道理的爲用戶提供buzzle_input在Python或bash的配置信息。你會選擇哪一個?你將如何實現它?我期待的是Python的需要,可能需要通過執行一些其他腳本,可能是從buzzle_input腳本中設置一些全局環境變量。

這不是生產代碼,只是一個內部工具開發的小團隊將使用來幫助管理的C/C++/FORTRAN代碼相當大的交叉編譯環境。

我最好的猜測是使用一些東西來包裝foobuzzle腳本,以便$ PYTHONPATH變量選擇當前的工作目錄,並將foobuzzle_input腳本導入並執行設置。有沒有更好的方法來做到這一點,而不包裝foobuzzle?執行bash腳本的任何特殊注意事項(假設安全性不是真正的問題,並且這些腳本不會以系統管理員權限運行)。

回答

1

我對你的上下文的解釋是你有一個Python腳本來執行各種類似make或autoconf的操作,並且你希望允許客戶爲Foobuzzle編寫他們自己的Makefile

與目錄,我不明白的問題。導入將始終搜索本地目錄?你可以跳轉到os.chdir()來改變當前的工作目錄,就像make一樣。

把它作爲一個bash腳本有專業人士,沒有人需要學習Python,或者特別是Python般的Foobuzzle DSL。但它不那麼強大:你基本上只限於發送和接收文本。你不能編寫bash代碼可以調用的支持函數(除非你也將它生成到bash中),適當的錯誤處理可能很難,等等。

根據配置需要的強大程度,我會使用蟒蛇。我可能會加載文件本身,並使用eval(),讓我完全控制它的命名空間。例如,我可以傳遞各種實用程序和輔助函數,或者提供可以直接操作的對象。

如果確實很簡單,指定標誌和名稱,那麼您可以將它作爲.ini文件,並在標準庫中使用ConfigParser()

+0

看起來像eval()正是我期待的,謝謝! – 2010-07-10 13:31:15

相關問題