【问题标题】:How to search within an argument and output a certain value如何在参数中搜索并输出某个值
【发布时间】:2014-10-21 19:54:39
【问题描述】:

我有以下脚本,但无法让它搜索字符串然后输出值。

如何获取参数并将其拆分,以便搜索“endpoint-machine-name=”然后输出其值?

命令如下:

python -u HostnameScript.py "discover-repository-location=null, Employee Notified=null, Manager     Title=Exec Dir Biostatistics, date-detected=Mon Aug 25 16:03:35 PDT 2014, endpoint-machine-name=Davidpc, incident-id=603, sender-ip=null, Machine Name=null, Assigned To=null, Business Unit=Development US"

我尝试过拆分,但无法正确搜索。

import sys, socket, string, commands, os, re, subprocess

arguments=sys.argv[1:]

for args in [item.split(", ") for item in arguments[]:
 if item.find("endpoint-machine-name=") != -1
 value=item.strip("endpoint-machine-name=")
 sys.stdout.write('Hostname=');print value

我最终得到的是

Hostname=discover-repository-location=null, Employee Notified=null, Manager Title=Exec Dir Biostatistics, date-detected=Mon Aug 25 16:03:35 PDT 2014, endpoint-machine-name=Davidpc, incident-id=603, sender-ip=null, Machine Name=null, Assigned To=null, Business Unit=Development US

【问题讨论】:

  • 缩进一个空格并用分号将不相关的语句放在一行中会使您的代码难以阅读。此外,您的代码中至少有两个SyntaxErrors 和一个IndentationError;你能贴一个running, minimal example吗?
  • 同时,您的代码中有一个非常明显的错误:您正在搜索"endpoint-machin-name=",但您的数据有"endpoint-machine-name=",这不是同一个字符串。
  • argument[] 是什么?
  • 无论如何,您的错误似乎是(1)您在搜索字符串中的拼写错误意味着没有匹配项,(2)您使用的是item而不是args应该是拆分每个item 的结果,并且(3)您的sys.stdout.write 可能缩进错误,因此它在if 之外。作为这三个错误的组合,对于每个项目,无论如何,您都会打印整个项目,前面有 Hostname=,它描述了您的输出。但是没有看到实际代码,我无法告诉你如何修复它。
  • 抱歉所有这些都是我的错别字。

标签: python search find arguments


【解决方案1】:

这样的事情怎么样?

import sys

pairs = sys.argv[1]

for p in pairs.split(', '):
    if 'endpoint-machine-name=' in p:
        print p.replace('endpoint-machine-name=', 'Hostname=')
        break

...或者,如果您真的想解析这些对:

import sys

pairs = sys.argv[1]

for p in pairs.split(', '):
    k, v = p.split('=', 1)

    if k == 'endpoint-machine-name':
        print 'Hostname={0}'.format(v)
        break

当然,如果字符串 ', ' 出现在您的 价值观。此外,strip 不会以这种方式运行。 strip 将字符串作为参数,表示 set 的字符 应该从字符串中剥离,而不是特定的有序序列 字符。

如您所说,如果您需要在其他脚本中使用该功能,请将其设为独立函数:

import sys

function find_host(pairs):
    for p in pairs.split(', '):
        k, v = p.split('=', 1)

        if k == 'endpoint-machine-name':
            print 'Hostname={0}'.format(v)
            break

if __name__ == '__main__':
    find_host(sys.argv[1])

【讨论】:

  • 这适用于命令行..但是当我将它与调用脚本的程序一起使用时,它需要使用..pairs = sys.argv[1:] 这我有问题.调用 Python 并有 1 个长命令。知道如何让它与它一起工作吗?
  • @Ronak 更新了我的答案。
【解决方案2】:

感谢您的帮助。当然,我在您的帮助下想通了。

这是我使用的代码。

#!/usr/bin/python

import sys

value2 = sys.argv[1:]


for p in value2:
    if 'policy-name=' in p:
            print p.replace('policy-name=','Policy Name=')
    if 'date-detected=' in p:
            print p.replace('date-detected=','Event Date=')

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2019-01-26
    • 2011-02-16
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2019-06-14
    • 2019-01-27
    相关资源
    最近更新 更多