在python中运行bash命令行脚本

时间:2017-01-26 16:37:52

标签: python git bash shell

是否可以在python中运行命令行bash脚本?我知道subprocess.call/check_output运行带参数的单个命令。但是,我该如何运行

for tag in `git branch -r | grep "tags/" | sed 's/ tags\///'`; do
  git tag -a -m"Converting SVN tags" \
      `echo $tag | grep "tags/" |sed 's/.*tags\///'` \
      refs/remotes/$tag
done 

在python中?我不想把“行”放在shell脚本中并让python调用它。

谢谢!

1 个答案:

答案 0 :(得分:2)

从bash脚本转换为python时,您可以采用两种方式:

  1. 您接管程序调用,只需替换循环/字符串处理,例如像这样:

    Animal& operator= (Animal const& other)
    
  2. 你这样做"正确的方式"并使用例如一个python git module。这最初是更多的工作,但长期有益,因为你获得了更多开箱即用的功能,并且在你的"快速入侵的shell调用中有更少的错误"

  3. 修改:正如评论者正确建议的那样,您应该尽量避免使用from subprocess import check_output for line in check_output('git branch -r', shell=True).split("\n"): line = line.strip() # do your replaces here, etc. leaving that for an exercise for you # run more `check_call` or `check_output` here 。在这种情况下,shell=True肯定更好,在其他情况下,当你知道 python脚本将在Linux系统和特定shell(例如bash)下运行时,然后具有check_output(['git', 'branch', '-r'])允许您访问shell=True下指定的环境变量,执行globbing等。有关详细讨论,请参阅here