带有subprocess.call的heredoc不会继续执行下一个命令

时间:2015-09-14 08:13:45

标签: python

我正在运行一些linux命令,但在linux heredoc之后,下一个(df)命令没有执行。

import subprocess

uci = "cav"

dse_db = "gtmgbldir=/cav/gtm/" + uci + "/" + uci + ".gld; \
            export gtmgbldir; \
            dse << EOF \
            dump -fileheader\n\
            EOF\n; \
            df; \
            "
subprocess.call(dse_db, shell=True)

更重要的是,如果heredod内部有错误,它根本不会继续。 我正在谈论&#34; dsa&#34;的错误。命令。 当然,如果我通过linux shell运行所有命令mannualy都可以。

1 个答案:

答案 0 :(得分:1)

当您使用反斜杠字符(\)进行行继续时,则不会插入实际的换行符。如果将字符串放入交互式解释器中,则可以非常轻松地看到这一点:

>>> "foo \
bar \
baz"
'foo bar baz'

正如您所看到的,\允许您分隔线但不会产生多线字符串。

要获得多行字符串,您应该使用三引号:

>>> '''foo
bar
baz'''
'foo\nbar\nbaz'
>>> """foo
bar
baz"""
'foo\nbar\nbaz'

然后,你的heredoc字符串是有效的,它可能会有效。