首页 > 解决方案 > bash 中的 subprocess.call() exec 命令,但我使用的是 zsh?

问题描述

我使用带有 zsh 的 Ubuntu 20。当我使用 subprocess.call 时,它总是使用 bash 来执行命令而不是 zsh。我该怎么做才能解决这个问题?

标签: python

解决方案


不,sh无论哪个 shell 是您的登录 shell,它都会使用。

有一个关键字参数可以选择不同的 shell,但您通常应该在子 shell 中运行尽可能少的代码;将非平凡的 shell 脚本与 Python 混合意味着维护者必须理解这两种语言。

whatever = subprocess.run(
    'echo $SHELL', 
    shell=True, executable='/usr/bin/zsh',
    check=True)

(这将回显您的登录 shell,因此/usr/bin/zsh即使您在没有executable, 或使用 Bash 的情况下运行它也会输出。)

在许多情况下,如果可以的话,你应该完全避免。shell=True


推荐阅读