我在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脚本。
答案 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 :(得分:0)
听起来问题是你想要摆脱的命令中字符串外部的引号。条带字符串方法会为您做到这一点:
command = command.strip(" '")
另外,坚持Amber关于如何整体命令格式化的答案,对我来说看起来是正确的。
最后,尝试直接在shell中运行命令,如果它在那里工作正常,那应该是送到Fabric的格式。