【问题标题】:Geting text from command prompt从命令提示符获取文本
【发布时间】:2020-12-16 12:50:06
【问题描述】:

我想从 cmd 提示符结果中获取文本。 举例来说,

import os
os.system('net view')

上面的行给了我下面的行

Server Name            Remark

-------------------------------------------------------------------------------
\\LAPTOP-5VBGN416
\\RASPBERRYPI          Samba 4.9.5-Debian
The command completed successfully

我的目标是检查是否存在 RASPBERRYPI 变量。我该怎么做?

.

【问题讨论】:

    标签: python command-line python-3.6 command-prompt


    【解决方案1】:

    试试这个:

    import os
    output = os.popen('net view').read()
    
    if 'RASPBERRYPI' in output:
        print("'RASPBERRYPI' was found.")
    else:
        print("'RASPBERRYPI' was NOT found.")
    

    注意: 有人声称 os.popen() 已弃用,但根据 https://raspberrypi.stackexchange.com/questions/71547/is-there-a-problem-with-using-deprecated-os-popenos.popen() 在 Python 2.6 中已弃用,但在 Python 3.x 中并未弃用,因为在 3.x 中,它是使用 subprocess.Popen() 实现的。


    如果您更喜欢使用subprocess 包,您可以通过这种方式捕获输出:

    import subprocess
    output = subprocess.Popen("net view",   # your command
                              shell=True,
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE
             ).communicate()[0]
    

    (如果您愿意,可以将.Popen() 的前两个参数更改为["net", "view"]shell=False,但这样做的原因留给读者研究。);- )

    【讨论】:

    • Popen("net view", shell=True, ...)Popen(["net", "view"], ...) 相比有什么特殊原因(默认为 shell=False)?
    • @alani,我必须选择一些东西。但好点——我在最后添加了一个简短的简介。 (我没有解释为什么我的帖子会滚雪球。)
    • 非常感谢。但我面临一个错误,即 TypeError: a bytes-like object is required, not 'str'
    • @woz523: 嗯...试试这个:设置output = ...后,插入print('Type is:', type(output))并确保打印出Type is: str。如果它打印出不同的东西,请确保您使用的是 Python3,并确保您设置输出的行是正确的(仔细检查您没有遗漏任何括号或参数)。
    • @woz523,你得到的 TypeError 让我觉得你将str 传递给一个期待bytes 的函数。我发布的代码不期望bytes,所以我认为问题出在您没有在此处发布的代码部分。 (如果没有看到您的代码,很难判断问题出在哪里。)也许您可以发布一个小型、精简且可自行工作的代码版本,以显示此问题以供我们解决?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多