python日志意外地打印缩进

时间:2013-11-19 08:26:12

标签: python logging

代码如下:

self.class_logg('http://example.com/api/?\
                option=ajax&nologin=1&a=vmware_migrate_2&\
                original_server_ip=%s&target_server_ip=%s&\
                vmware_name=%s' % (self.ip, dest_node.ip, machine.name))

因为这个字符串太长了,所以我必须把它拆分成几行,但遗憾的是在日志中发现它的打印方式如下:

http://example.com/api/?option=ajax            &nologin=1&a=vmware_migrate_2            &original_server_ip=192.168.0.224$

显然它会在那里打印缩进空间。如何解决这个问题? 例如,self.class_logg就在那里,在我的情况下,即使是打印也会出现问题。

4 个答案:

答案 0 :(得分:2)

您可以删除\

self.class_logg(('http://example.com/api/?'
                 'option=ajax&nologin=1&a=vmware_migrate_2&'
                 'original_server_ip=%s&target_server_ip=%s&'
                 'vmware_name=%s' % (self.ip, dest_node.ip, machine.name)))

在Python中,当字符串在代码中彼此相邻时,它将组合它们。它被称为“字符串分组”


然而,在我看来,你会用字典做得更好:

fields = {'option': 'ajax',
          'nologin': '1',
          'a': 'vmware_migrate_2',
          'original_server_ip': self.ip,
          'target_server_ip': dest_node.ip,
          'vmware_name': machine.name}

params = '&'.join(['{}={}'.format(k, v) for k, v in fields.items()])
self.class_logg('http://example.com/api/?{}'.format(params))

如果订单很重要(不应该这样)您可以使用OrderedDict或元组列表。

答案 1 :(得分:1)

您应该使用分组而不是连接或任何其他线路制动:

self.class_logg('http://example.com/api/?'
                'option=ajax&nologin=1&a=vmware_migrate_2&'
                'original_server_ip=%s&target_server_ip=%s&'
                'vmware_name=%s' % (self.ip, dest_node.ip, machine.name))

个人推荐:您应该使用 format 而不是 %

self.class_logg(('http://example.com/api/?'
                 'option=ajax&nologin=1&a=vmware_migrate_2&'
                 'original_server_ip={}&target_server_ip={}&'
                 'vmware_name={}').format(self.ip, dest_node.ip, machine.name))

答案 2 :(得分:1)

您可以利用Python处理相邻字符串常量的方法:

self.class_logg('http://example.com/api/?'
                'option=ajax&nologin=1&a=vmware_migrate_2&'
                'original_server_ip=%s&target_server_ip=%s&'
                'vmware_name=%s' % (self.ip, dest_node.ip, machine.name))

当Python看到两个字符串常量紧邻时,它会自动将它们连接在一起以使单个字符串保持不变。这包括跨行,只要Python认识到下一行是前一行的延续(在这种情况下,它将在一对括号内)。

您可以通过一个简单示例看到这一点:

>>> print ('abc'
           'def'
           'ghi')
abcdefghi

答案 3 :(得分:0)

这里有一个带有表格的巨大字符串。分成四个不同的字符串,如下所示:

self.class_logg('http://example.com/api/?'\
            'option=ajax&nologin=1&a=vmware_migrate_2&'\
            'original_server_ip=%s&target_server_ip=%s&'\
            'vmware_name=%s' % (self.ip, dest_node.ip, machine.name))

重要的是每个字符串开头的单引号。