如何从包含分号的配置文件中打印一行?

时间:2015-01-23 19:04:14

标签: python linux bash

我在Ubuntu 12.04上有一个python 2.7脚本,它使用从文本文件获取的Fabric本地命令。当我尝试使用带有分号的单线程时,Fabric无法解析该线并且断开。是否有可行的语法,或者我应该在其他地方运行此命令?

---------编辑-----------

比最初包含的实际问题更简洁的问题陈述。这根本不是关于Fabric,即使是打印也不能在配置文件中使用这个文本:

一个python配置文件:

[firmware-jobs] 1: echo ".... ; ....." > /tmp/tmp-file

带有Fabric的python文件:

from ConfigParser import SafeConfigParser confparser = SafeConfigParser() confparser.read(CONFFILE)

for (key, command) in CONFOBJ.items('firmware-jobs'): try: print command

------结束编辑-----------

if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi

我试过了:

"if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi"
if grep -q "CPLD " tmp-file '\;' then echo "y" | <some long command> '\;' fi
if grep -q "CPLD " tmp-file ";" then echo "y" | <some long command> ";" fi

典型的失败:

[localhost] local: "if grep -q "CPLD " tmp-file
/bin/sh: 1: Syntax error: Unterminated quoted string

Fatal error: local() encountered an error (return code 2) while executing '"if grep -q "CPLD " tmp-file'

要求:

我不希望将条件移到Python中,因为文本文件支持跨不同硬件平台和版本的通用Python脚本。

3 个答案:

答案 0 :(得分:2)

您需要在字符串外部和内部使用不同的引号,否则Python会认为您正在结束字符串。试试这个:

'if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi'

或者如果你还需要在字符串中使用单引号,那么:

'''if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi'''

Python认为三引号是单引号的一种独特引用,并且在它看到另一个三引号之前不会结束该字符串。 (这也适用于"""。)

答案 1 :(得分:1)

它是2.7 configparser中的一个错误

http://bugs.python.org/issue16374

分号是内联注释分隔符

感谢您的建议!

答案 2 :(得分:0)

听起来问题是你想要摆脱的命令中字符串外部的引号。条带字符串方法会为您做到这一点:

command = command.strip(" '")

另外,坚持Amber关于如何整体命令格式化的答案,对我来说看起来是正确的。

最后,尝试直接在shell中运行命令,如果它在那里工作正常,那应该是送到Fabric的格式。