Python执行命令行
背景
我们知道,虽然会破坏平台独立性,但是有的时候需要在代码里面调用命令行来获取一些信息,那么了解在 Python 中如何执行命令行至关重要
使用介绍
Python 中使用命令行可以通过 subprocess 来实现,比如执行一个简单的 ls 命令
r = subprocess.call(["ls"])
执行过后,会在标准输出上显示当前目录下的文件
注意如果有重定向或者管道符等比较复杂的命令应该使用 sh -c '命令行'
r = subprocess.call(["sh", "-c", 'ls; echo ;ls | grep init'])
如果这么写
r = subprocess.call(['ls; echo ;ls | grep init'])
这是后会报 ls; echo ;ls | grep init 文件找不到,这个方法执行,会将列表的第一个字符串作为参数,其他的作为参数,所以这里这么写就会将整个字符串当作命令了,自然找不到这个命令文件,同理如果参数后面出现管道符,重定向等符号,因为是直接作为参数传给命令,所以并不能正常工作,因为这些符号是 shell 语法,命令并不能识别,因此要解决这个问题只能够使用 sh -c string,这条语法就是让 shell 来直接执行字符串 string 所代表的命令,因为直接是由 shell 解释器来执行的,就不会出现这些问题了
扩展
Java 中使用命令行,一般是使用
Runtime.getRuntime().exec()
传入的是字符串数组,用法原理和 Python 一样