让我们说我正在设计一个工具foobuzzle(foobuzzle的确切工作是设置SRPM文件,以便将各种代码交叉编译到它们自己的分区前缀目录中,但这并不重要)。我希望foobuzzle接收一个(智能的,代码精通的)客户端指定的输入文件(buzzle_input),该客户端将告诉foobuzzle他们希望如何执行这些操作。
我在Python中编写foobuzzle,用户在Python或bash中提供buzzle_input配置信息似乎是有意义的。你会选哪个?你会如何实现它?我期望Python需要一些全局环境变量,可能需要通过执行一些其他脚本来设置,可能来自buzzle_input脚本。
这不是生产代码,只是一个小型开发人员团队将用来帮助管理C / C ++ / FORTRAN代码的相当大的交叉编译环境的内部工具。
我最好的猜测是使用一些东西来包装foobuzzle脚本,以便$ PYTHONPATH变量获取当前工作目录,并按照设置导入和执行foobuzzle_input脚本。有没有更清洁的方法来做这个没有包裹foobuzzle?执行bash脚本的任何特殊注意事项(假设安全性并不是真正的问题,并且这些脚本不会以系统管理员权限运行)。
答案 0 :(得分:1)
我对您的上下文的解释是,您有一个Python脚本执行各种类似make或autoconf的操作,并且您希望允许客户为Foobuzzle编写自己的Makefile
。
目录的问题我不明白。导入将始终搜索本地目录?当你跳来改变当前的工作目录时,你可以os.chdir()
,比如make does。
将它作为一个bash脚本让专业人士无需学习Python,特别是类似Python的Foobuzzle DSL。但它的功能要强得多:你基本上只限于发送和接收文本。您不能编写bash代码可以调用的支持函数(除非您将其生成为bash),正确的错误处理可能很难等等。
根据配置需要的强大程度,我会使用Python。我可能会加载文件并在其上使用eval()
,让我可以完全控制其命名空间。例如,我可以传递各种实用程序和辅助函数,或者提供可以直接操作的对象。
如果它真的很简单,指定标志和名称,那么你可以将它作为.ini文件,并在标准库中使用ConfigParser()
。