在 Python 中调用 Shell 命令
使用 Python 调用 Shell 命令能够非常方便的使用原生 Shell 命令,扩大 Python 的使用作用范围。进一步说明了 Python 作为胶水语义的特性。
Python 中使用 shell 命令
使用 !号
仅在 Jupyter Notebook 中可以使用。对于一些简单命令,如ls, pwd等其实不使用!也是可以的, 但是稍微复杂的 shell 命令是不行的,建议都使用 ! 作为 shell 命令的开头在 Jupyter Notebook 中使用。
| 1 | !ls | 
使用 os.popen 函数
即可以在 Jupyter Notebook 中使用,也可以在 Pycharm 中使用。
| 1 | import os | 
使用 subprocess.Popen 函数
即可以在 Jupyter Notebook 中使用,也可以在 Pycharm 中使用。
| 1 | import subprocess | 
使用 os.system 函数
即可以在 Jupyter Notebook 中使用,也可以在 Pycharm 中使用。
注意,该函数直接运行 shell 命令,但返回值是 0,不像 os.popen 和 subprocess.Popen 返回值是 shell 命令运行后的打印结果。
| 1 | os.system("ls") | 
Python 脚本中使用 shell 命令
在 Python 脚本使用 shell 命令不能使用 “!” 号,可以使用 os.popen、subprocess.Popen、os.system 函数。
注意
- os.popen 返回字符串中每一个条目后面带有 ‘\n’; 而 subprocess.Popen 不仅带有 ‘\n’,还是以字节编码的,需要写解码 decode(); os.system 返回值为 0.
- 路径中可能存在字符  ‘ ‘,’(‘,’)’,’(’,’)’,’&’ (分别是空格,左括号,右括号,中文左括号,中文右括号, &)等等,Python 在调用 os.system() 命令或者上面其他命令时,会报类似错误:sh: 1:Syntax error: “(“ unexpected,解决方法是先对路径进行转化:然后,再进行调用:1 
 2
 3
 4
 5
 6
 7# 如果还有其他特殊符号也请按照下面格式转换 
 command = command.replace(" ", "\ ")
 .replace("(", "\(")
 .replace(")", "\)")
 .replace("(", "\(")
 .replace(")", "\)")
 .replace("&", "\&")1 os.system(command) 
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J. Xu!
 评论









