如何在Python运行 bash 脚本?
如果您使用任何主要操作系统,则您是在与 bash 间接交互。如果您运行的是 Ubuntu、Linux Mint 或任何其他 Linux 发行版,则每次使用终端时您都在与 bash 交互。假设您已经编写了需要从Python代码调用的 bash 脚本。旨在产生新进程并与它们通信的模块有一个名称subprocess 。
让我们考虑这样一个简单的例子,展示一个推荐的调用子流程的方法。作为参数,您必须传递要调用的命令及其参数,所有这些都包含在一个列表中。
Python3
import subprocess
# execute command
subprocess.run(["echo", "Geeks for geeks"])
Python3
import subprocess
# From Python3.7 you can add
# keyword argument capture_output
print(subprocess.run(["echo", "Geeks for geeks"],
capture_output=True))
# For older versions of Python:
print(subprocess.check_output(["echo",
"Geeks for geeks"]))
Python3
import subprocess
# If your shell script has shebang,
# you can omit shell=True argument.
subprocess.run(["/path/to/your/shell/script",
"arguments"], shell=True)
输出:
CompletedProcess(args=[‘echo’, ‘Geeks for geeks’], returncode=0)
创建一个新进程并使用参数“Geeks for geeks”调用命令echo 。虽然,命令的结果不会被Python脚本捕获。我们可以通过添加可选的关键字参数capture_output=True来运行函数,或者通过从同一模块调用check_output函数来实现。这两个函数都会调用命令,但第一个在 Python3.7 和更新版本中可用。
蟒蛇3
import subprocess
# From Python3.7 you can add
# keyword argument capture_output
print(subprocess.run(["echo", "Geeks for geeks"],
capture_output=True))
# For older versions of Python:
print(subprocess.check_output(["echo",
"Geeks for geeks"]))
输出:
CompletedProcess(args=[‘echo’, ‘Geeks for geeks’], returncode=0, stdout=b’Geeks for geeks\n’, stderr=b”)
b’Geeks for geeks\n’
从Python代码调用已经存在的 shell 脚本怎么样?它也是通过运行命令完成的!
蟒蛇3
import subprocess
# If your shell script has shebang,
# you can omit shell=True argument.
subprocess.run(["/path/to/your/shell/script",
"arguments"], shell=True)
输出:
CompletedProcess(args=[‘/path/to/your/shell/script’, ‘arguments’], returncode=127)
调用shell脚本的常见问题及解决方法:
- 调用脚本时权限被拒绝 - 不要忘记使您的脚本可执行!使用chmod +x /path/to/your/script
- OSError: [Errno 8] Exec 格式错误 — 运行函数缺少 shell=True 选项或脚本没有 shebang。