在 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!
评论