【问题标题】:Can this be shortened / streamlined in any way?这可以以任何方式缩短/简化吗?
【发布时间】:2014-09-11 21:53:24
【问题描述】:

我目前正在尝试学习 Python,但可能仍然在做太多的步骤/太笨重的方式。

我在我的一个小程序中得到了以下代码行,我一直在想是否可以让它更有效率?

stdin, stdout, stderr = ssh.exec_command('echo -e "MAIN\nnotifications\nsmtp\nstatus$" | confd-client.plx -batch')
orglines = stdout.readlines()
smtpstatus = int(orglines[20])
if smtpstatus == 1:
     do something
else:
     do something else

标准输出的示例输出如下所示:

['Available modes: MAIN OBJS RAW WIZARD.\n', 'Type mode name to switch mode.\n', "Typing 'help' will always give some help.\n", 'device_info$\n', 'limiting$\n', 'overlay@\n', 'reboot_reason%\n', 'recipients@\n', 'sender$\n', 'smtp\n', 'authentication$\n', 'password$\n', 'port$\n', 'server$\n', 'status$\n', 'tls$\n', 'username$\n', '1\n']

基本上,我可以从这里的 stdout 输出中以更有效的方式填充变量 smtpstatus 吗?我不确定我必须将它转换为整数这一事实是否会使它变得更复杂一些?

“字段编号”可能会不时变化,对于这个特定的值,它是 20,正如您从上面的代码 sn-p 中看到的那样。

提前致谢,迈克

【问题讨论】:

    标签: python parsing variables stdout readlines


    【解决方案1】:

    不是真的。反正也不是很多。转换为int 的效率有点低,是的,因为它有异常处理开销……但您可以像比较这两个字符串一样比较smtpstatus == "1\n"。但这不会有太大的不同。如果您不需要其余部分,您也可以考虑只阅读stdout 直到第 20 行。这可能是最大的放缓。

    【讨论】:

    • 啊,谢谢,你就是这样变灰的。 @蒂姆
    • 不客气。看看How do I format my posts using Markdown or HTML?,你可以在这里做的很棒。
    • 蒂姆,感谢您的反馈,非常感谢。您能否扩展一下如何将“stdout”读到第 20 行?我最初在“每行基础”上处理它时遇到了麻烦——这就是我实际上使用“stdout.readlines()”而不是“stdout.read()”的原因。
    • 蒂姆,多亏了您最初的回复,我想我的流程变得更简单了。现在我正在执行以下操作:orglines = stdout.readlines() if orglines[20] == "1\n": 这使得变量少了一个,int 转换少了。谢谢你让我走上正轨! ;)
    • Daniel - 很抱歉名字打错了。我猜我还在习惯阅读论坛格式...
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2018-04-18
    • 2021-06-23
    • 2017-07-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多