gpt4 book ai didi

python - Bash 命令可以在 shell 中运行,但不能通过 python suprocess.run 运行

转载 作者:行者123 更新时间:2023-12-01 07:40:30 26 4
gpt4 key购买 nike

如果我在 ubuntu shell 中运行此命令:

debconf-set-selections <<< 'postfix postfix/mailname string server.exmaple.com'

它运行成功,但如果我通过 python 运行它:

>>> from subprocess import run
>>> run("debconf-set-selections <<< 'postfix postfix/mailname string server.exmaple.com'", shell=True)
/bin/sh: 1: Syntax error: redirection unexpected
CompletedProcess(args="debconf-set-selections <<< 'postfix postfix/mailname string server.exmaple.com'", returncode=2)

我不明白为什么 python 试图解释是否存在重定向等。如何使命令成功运行,以便可以编写应用程序安装的脚本,例如在这种情况下通过 python (不是普通的 bash 脚本)进行 postfix?

我尝试了各种带有双引号和单引号的形式(如其他帖子中建议的那样),但没有成功。

最佳答案

subprocess使用/bin/sh作为 shell,并且您的系统可能不支持此处字符串 ( <<< ),因此会出现错误。

来自 subprocess来源:

if shell:
# On Android the default shell is at '/system/bin/sh'.
unix_shell = ('/system/bin/sh' if
hasattr(sys, 'getandroidapilevel') else '/bin/sh')

您可以将该命令作为参数运行到任何支持此处字符串的 shell,例如bash :

run('bash -c "debconf-set-selections <<< \"postfix postfix/mailname string server.exmaple.com\""', shell=True)

小心引用。

或者更好的是,您可以保留 POSIX 并使用 echo并通过 STDIN 传递管道:

run("echo 'postfix postfix/mailname string server.exmaple.com' | debconf-set-selections", shell=True)

关于python - Bash 命令可以在 shell 中运行,但不能通过 python suprocess.run 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56743900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com