如何检查shell命令是否返回任何内容

时间:2016-02-12 11:18:46

标签: python python-2.7

我正在编写一个脚本来从指定的路径中提取内容。我将这些值返回到变量中。我如何检查shell命令是否返回了什么内容。

我的代码:

def any_HE():
    global config, logger, status, file_size
    config = ConfigParser.RawConfigParser()
    config.read('config2.cfg')
    for section in sorted(config.sections(), key=str.lower):
        components = dict() #start with empty dictionary for each section
    #Retrieving the username and password from config for each section
        if not config.has_option(section, 'server.user_name'):
            continue
        env.user = config.get(section, 'server.user_name')
        env.password = config.get(section, 'server.password')
        host = config.get(section, 'server.ip')
        print "Trying to connect to {} server.....".format(section)

        with settings(hide('warnings', 'running', 'stdout', 'stderr'),warn_only=True, host_string=host):
            try:
                files = run('ls -ltr /opt/nds')
                if files!=0:
                    print '{}--Something'.format(section)
                else:
                    print '{} --Nothing'.format(section)
            except Exception as e:
                print e

我尝试检查1或0和True或false但似乎没有任何效果。在某些服务器中,路径为' / opt / nds /'不存在。所以在这种情况下,文件中没有任何内容。我想区分返回文件的内容和没有返回文件的内容。

4 个答案:

答案 0 :(得分:2)

首先,你隐藏了stdout。 如果你摆脱它,你会得到一个字符串,其中包含远程主机上的命令结果。然后,您可以按os.linesep(假设相同的平台)拆分它,但您还应该处理其他内容,例如SSH横幅和检索结果中的颜色。

答案 1 :(得分:1)

plumbum是一个很棒的库,用于从python脚本运行shell命令。 E.g:

from plumbum.local import ls
from plumbum import ProcessExecutionError
cmd = ls['-ltr']['/opt/nds']  # construct the command
try:    
    files = cmd().splitlines()  # run the command
    if ...:
        print ...:
except ProcessExecutionError:
    # command exited with a non-zero status code
    ...

除了这个基本用法之外(和subprocess模块不同),它还支持输出重定向和命令流水线等等,简单直观的语法(通过重载python运算符,如&# 39; |'用于管道)。

答案 2 :(得分:1)

正如perror已经评论过的那样,python子进程模块提供了正确的工具。 https://docs.python.org/2/library/subprocess.html

针对您的具体问题,您可以使用check_output函数。 文档提供了以下示例:

import subprocess
subprocess.check_output(["echo", "Hello World!"])

给出“Hello World”

答案 3 :(得分:0)

为了更好地控制您运行的流程,您需要使用subprocess模块。

以下是代码示例:

import subprocess
task = subprocess.Popen(['ls', '-ltr', '/opt/nds'], stdout=subprocess.PIPE)
print task.communicate()