【问题标题】:Correct way in Python to write a bash for loop with `subprocess`在 Python 中使用 `subprocess` 编写 bash for 循环的正确方法
【发布时间】:2020-04-24 14:23:50
【问题描述】:

this other SO question 中,我看到bash 的这种语法在编写for 循环时似乎在Python 中不起作用:

~ $ for num in {2..4}; do echo $num; done
2
3
4

它不是 4 次不同的迭代,而是一次:

>>> print(subprocess.check_output("for num in {2..4}; do echo $num; done", shell=True).decode())
{2..4}

为什么 Python 不支持这种语法?

我看到确实支持这种其他语法:

>>> print(subprocess.check_output("for num in 2 3 4; do echo $num; done", shell=True).decode())
2
3
4

【问题讨论】:

  • check_output("bash -c 'for num in {2..4}; do echo $num; done' ", shell=True).decode()
  • 所以问题是 Python 使用的不是 Bash 而是 Dash?
  • 这表明它可能使用旧的sh 而不是bash saltycrane.com/blog/2011/04/…
  • 您的SHELL 环境变量设置是什么?如果不是bash,把它改成那个有帮助吗?
  • 这对我有用check_output(...., executable='/bin/bash')

标签: python bash subprocess


【解决方案1】:

发布How to use the bash shell with Python's subprocess module instead of /bin/sh 显示它使用/bin/sh 但您可以使用executable='/bin/bash' 更改它

import subprocess

print(subprocess.check_output("for num in {2..4}; do echo $num; done", shell=True, executable='/bin/bash').decode())

最终你可以使用bash -c "command"

import subprocess

print(subprocess.check_output('bash -c "for num in {2..4}; do echo $num; done" ', shell=True).decode())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2010-09-08
    • 2019-06-21
    • 2020-04-29
    • 2016-11-08
    相关资源
    最近更新 更多