📜  如何在Python运行 bash 脚本?

📅  最后修改于: 2022-05-13 01:55:14.538000             🧑  作者: Mango

如何在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)


输出:

创建一个新进程并使用参数“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"]))

输出:

从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)

输出:

调用shell脚本的常见问题及解决方法:

  • 调用脚本时权限被拒绝 - 不要忘记使您的脚本可执行!使用chmod +x /path/to/your/script
  • OSError: [Errno 8] Exec 格式错误 — 运行函数缺少 shell=True 选项或脚本没有 shebang。