通读官方文档,做了几点总结:
建议使用subprocess
主要类是Popen, 貌似用的不多
主要函数有check, check_call, check_output
命令+参数用list
shell=True管用, 此时命令用一个字符串
实际使用了,几点疑惑如下:
哪个函数常用, 貌似check开头的函数完成的功能差不多?
需要命令行的返回值
需要命令的输出值
stderr
shell=True到底是好用还是不好用? 我个人倾向于使用它, 因为此时我可以利用系统的bash, 写一点较复杂的cmd. shell=False下需要使用一个列表, 一个一个列麻烦
我因为写BashShell后, 我觉得Shell这么语言太不喜欢了(但是我能写shell), 因此想结合Shell+Python做一些自动化的工作, Shell做外层薄薄的封装, Python完成底层核心的逻辑(若使用shell来完成我的逻辑, 选择go die), 哪里有这方面的经验汲取?
想阅读下使用subprocess的较为复杂的代码, 哪里看? (网上搜到的太简单了, 感觉帮助不大)
Linux-Server_64bit Bash Python2.7
是有細微差別的,check_all不會等子進程的,主進程退了就立刻返回,check_output則會等
shell=True有安全隱患,官方的例子很有形象的說明問題:
如果是想做自動化部署維運之類的,建議直接用ansible或salt
subprocess本身就是個殼,複雜還是在bash本身。如果你想用python程式來做一些系統管理的事情,可以盡量用python自己的系統函數來做而不是調subprocess,這樣控制更精準