2

解决了

我有这个字符串:

'  ServerAlias {hostNameshort}.* www.{hostNameshort}.*'.format(hostNameshort=hostNameshort)

但它一直给我一个语法错误。该行应该是这个 bash 等效项:

echo "    ServerAlias ${hostOnly}.* www.${hostOnly}.*" >> $prjFile

请注意,第一个字符串是 myFile.write 函数的一部分,但这不是问题,我什至无法让字符串足够有意义,让我运行程序。

追溯:

  File "tomahawk_alpha.py", line 89
    '  ServerAlias {hostNameshort}.* www.{hostNameshort}.*'.format(hostNameshort=hostNameshort)
                                                          ^

但无论我如何更改该'符号,它似乎都不起作用。我究竟做错了什么?

回应@mgilson:

    myFile = open(prjFile, 'w+')
    myFile.write("<VirtualHost 192.168.75.100:80>"
                 "  ServerName www.{hostName}".format(hostName=hostName)
                 '  ServerAlias {hostNameshort}.* www.{hostNameshort}.*'.format(hostNameshort=hostNameshort)
                 "  DocumentRoot ", prjDir, "/html"
                 '  CustomLog "\"|/usr/sbin/cronolog /var/log/httpd/class/',prjCode,'/\{hostName}.log.%Y%m%d\" urchin"'.format(hostName=hostName)
                 "</VirtualHost>")
    myFile.close()

我在它自己的 myFile.write 行中有每一行,但它只产生第一行然后退出。所以我假设调用它一次并像这样间隔它会产生预期的结果。

4

2 回答 2

4

自动字符串连接仅适用于字符串文字:

"foo"  "bar" 

结果是"foobar"

但是,以下方法不起作用:

("{}".format("foo") 
 "bar")

这类似于您正在做的事情。解析器看到如下内容:

"{}".format("foo") "bar"

(因为它加入了有未终止括号的行),这显然不是有效的语法。要修复它,您需要显式连接字符串。例如:

("{}".format("foo") +
 "bar")

或者对整个字符串使用字符串格式,而不是一次只使用一个字符串。

于 2013-05-31T17:37:31.097 回答
3

您有几个语法错误。但是,您可能希望改用三重引号字符串 - 从长远来看更容易修改:

myFile.write("""<VirtualHost 192.168.75.100:80>
               ServerName www.{hostName}
               ServerAlias {hostNameshort}.* www.{hostNameshort}.*
               DocumentRoot {prjDir}/html
               CustomLog "\"|/usr/sbin/cronolog /var/log/httpd/class/{prjCode}/\{hostName}.log.%Y%m%d\" urchin"
             </VirtualHost>""".format(hostName=hn, hostNameshort=hns, prjDir=prjd, prjCode=prjc))
于 2013-05-31T17:39:39.027 回答