如何在python中初始化unix / shell命令时转义引号?

时间:2014-03-10 09:02:39

标签: python syntax target

我正在使用target.write命令编写此行

line4 = "do echo "$i|$( geoiplookup -f /usr/share/GeoIP/GeoIP.dat $i | cut -d' ' -f4 -n | sed -e 's/,$//' -e '/^$/d' )" >> $output;".format(name)

但我面临错误:

  File "m.py", line 8
    target.write('output=/var/www/html/Result/{0}/RIPs.txt;\necho > $output;\nfor i in $( cat /var/www/html/Result/{0}/PWIPs.txt );\ndo echo "$i|$( geoiplookup -f /usr/share/GeoIP/GeoIP.dat $i | cut -d' ' -f4 -n | sed -e 's/,$//' -e '/^$/d' )" >> $output;;\ndone'.format(name))
                                                                                                                                                                                                                              ^
SyntaxError: invalid syntax

我也删除了代码

| sed -e 's/,$//' -e '/^$/d'

但是我得到的文件没有'-d后的字符串?

任何帮助?

由于

3 个答案:

答案 0 :(得分:1)

只需将unix命令/ shell脚本包装为带有三引号的字符串,例如:

>>> import os
>>> cmd = r""" echo "Hello World" """
>>> os.system(cmd)
Hello World

正如@pts指出的那样,斜杠可能无法正确解析,因此请使用原始字符串,例如r"""..."""。见http://docs.python.org/2/reference/lexical_analysis.html

答案 1 :(得分:1)

不要忘记r,它会创建一个原始字符串文字。除非字符串中有""",否则这将有效。在这种情况下,请改用r'''...'''

import os
os.system(r"""do echo "$i|$( geoiplookup -f /usr/share/GeoIP/GeoIP.dat $i | cut -d' ' -f4 -n | sed -e 's/,$//' -e '/^$/d' )" >> $output;""".format(name))

答案 2 :(得分:0)

stackoverflows语法高亮应该给你一个提示:你使用"引用字符串到python和字符串本身 - python应该如何区分它们?

您需要为字符串及其引号添加不同的引号,或者转义字符串中的引号。