解决
我有这个字符串:
' 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行中的每一行,但它只生成第一行然后退出。所以我假设调用它一次并将它隔开就会产生预期的结果。
答案 0 :(得分:5)
自动字符串连接仅适用于字符串文字:
"foo" "bar"
结果为"foobar"
但是,以下内容不起作用:
("{}".format("foo")
"bar")
这类似于你正在做的事情。解析器看到这样的东西:
"{}".format("foo") "bar"
(因为它连接有未确定的括号的行),这显然不是有效的语法。要修复它,您需要显式连接字符串。 e.g:
("{}".format("foo") +
"bar")
或者在整个字符串上使用字符串格式,而不是一次只使用一个字符串。
答案 1 :(得分:4)
您有几个语法错误。但是,您可能希望查看使用三重引用的字符串 - 从长远来看更容易修改:
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))