gpt4 book ai didi

python - 如果命令是列表且包含 '&&' 或 '||',则 Popen 失败

转载 作者:行者123 更新时间:2023-11-30 22:48:06 24 4
gpt4 key购买 nike

我有一个 python 脚本正在运行 linux 命令来检查文件是否存在:

>>> p = subprocess.Popen([ 'sudo', 'test', '-f', '/root/some_file', '&&', 'echo', 'True', '||', 'echo', 'False' ])

它产生错误:

>>> test: extra argument `&&'

如果将命令作为单个传递,则它会成功执行:

>>> p = subprocess.Popen('sudo test -f /root/some_file && echo True || echo False' ], shell=True)
>>> True

如果将命令作为列表传递,为什么会失败?

我必须同时使用 && 和 ||检查根文件是否存在,以便我无法按照建议将其转换为单独的命令链 here

最佳答案

根据这个答案: Python: subprocess call with shell=False not working

当使用 shell=True 调用 Popen 时,您应该使用字符串。当使用 shell=False 调用 Popen 时,您应该使用列表。

使用“&&”和“||”仅当您使用 shell=True 时才有效,因为它们需要 shell。这意味着您只能使用字符串作为命令而不是列表来使其工作。

如果您将命令作为列表获取,那么您可以执行以下操作:

" ".join(cmd_list)

https://docs.python.org/2/library/subprocess.html#frequently-used-arguments

关于python - 如果命令是列表且包含 '&&' 或 '||',则 Popen 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40288544/

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