Pat*_*ick 7 python linux scripting
我正在研究 Python 是否可以替代 Bash 以用于 shell 脚本编写。我已经看到Python可以使用subprocess.call()或os.system()执行Linux命令。但我在某处读过(忘记了文章的链接),使用这些是一件坏事。这是真的吗?
如果是的话,那为什么这是一件坏事呢?
如果不是,那么可以肯定地说 Python 确实可以替代 Bash 来编写脚本,因为我可以使用这两个函数调用中的任何一个来执行 Linux 命令?
注意:如果我没有记错的话, os.system() 已被弃用,应该使用 subprocess.call() 代替,但这不是问题的要点。
os.system()或subprocess.call(..., shell=True)不能替换外壳,因为它们实际上使用了外壳。os.system("foo")实际上调用sh -c "foo"——也就是说,它foo作为 shell 脚本运行。因此,使用它绝不是取代shell。对于 来说也是如此subprocess.call("foo", shell=True)。
subprocess.Popen该系列中的 和 函数可以替代 shell,但这通常会导致代码冗长且难以处理。考虑以下 shell 脚本:
#!/bin/sh
foo "$1" | bar "$2"
Run Code Online (Sandbox Code Playgroud)
现在,让我们看看如何在 Python 中以不启动任何 shell 的方式重现该内容:
#!/usr/bin/env python
import subprocess, sys
p1 = subprocess.Popen(["foo", sys.argv[1]], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["bar", sys.argv[2]], stdin=p1.stdout)
sys.exit(p2.wait())
Run Code Online (Sandbox Code Playgroud)
我们从 19 个字符(在 shebang 之后)增加到 148 个字符(在 shebang 和导入之后)——这是一个完全琐碎的脚本,没有使用更高级的功能,例如进程替换、命令替换等。
| 归档时间: |
|
| 查看次数: |
4991 次 |
| 最近记录: |