如何在python中的subprocess.check_output中使用字符串变量

时间:2014-01-10 10:44:56

标签: python python-2.7 subprocess

我想使用python

在linux上运行一个带有args的命令

我有以下代码:

import subprocess

msg = 'this is commit'
cmdtorun = 'hg commit -m "{}"'.format(msg)

try:
    subprocess.check_output(cmdtorun, shell=True)
    print "commit done"
except subprocess.CalledProcessError:
    print "commit failed

但是这给了我错误。

1 个答案:

答案 0 :(得分:2)

最有可能的是,你的问题完全不同。检查你实际得到的错误。我猜你在错误的目录中执行hg(传递cwd=关键字参数)。

此外,您使用'"{}"'.format进行转义不正确 - 当msg包含双引号时失败。您可以使用shlex.quote进行转义,但这很容易出错。让子进程执行转义要容易得多:

import subprocess
msg = 'this is commit'
try:
    subprocess.check_output(['hg', 'commit', '-m', msg])
    print("commit done")
except subprocess.CalledProcessError as cpe:
    print("commit failed: %r" % cpe)