本人是一名幼儿园结业的 python程序员,人生苦短我用Python,不喜勿喷,希望能够帮助广大的猿们。
项目需要对mongoDB进行数据备份,在写python脚本运行 shell命令mongoexport时 出现了无法识别此命令的问题。
开始跳坑。
如果你是 win下开发不会烦恼此问题,因为 win和linux对命令解析方式 是不同的。(在这先不多说解析命令方式了)
入坑第一步 我使用了 python内置模块 os.system(cmd) 此命令运行部分linux命令如丝滑柔顺(比如不恰当,请原谅我这个幼儿园结业生,暂未踩到其他命令坑),但我用system调用了 mongoexport 命令后出现找不到命令的问题(可能大神一眼就能看出这是为什么)
没错它识别步到 --type=json 选项是什么了,也就是入坑的第一步你会查为无法识别。从百度-->Google 你发现找不到相关解答,我可以肯定告诉你 这不是"识别问题" 而是它根本就没有识别到这是一个 MongoDB的工具.
所以使用 os.system 放弃吧骚年
解决方案:subprocess 模块
此模块可以从更好的运行 shell命令 是python 可能是三方模块具体没查。
谷歌 or 百度都可以找到相关使用方法,里面参数很多要好好阅读。
当你要指定运行shell时一定要将shell参数设置为True。使用subprocess.call(str,shell=True)
更加关键的是要设置环境变量,虽然env=None会继承 父进程的环境变量但是出现 No such file or directory 这是因为没有环境变量的问题。不必担心 只要在环境变量选项中 env=字典格式的 {'命令':'命令位置'}就能解决此问题了。
完整的: subprocess.call(cmd,env={'mongoexport':'命令位置'},shell=True)
注意: cmd 必须为 字符串 且 必须与命令行输入的格式保持一致。
命令位置可以使用: where is -b mongoexport where is 命令 可以找到。