我正在编写一个脚本来从指定的路径中提取内容。我将这些值返回到变量中。我如何检查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 /'不存在。所以在这种情况下,文件中没有任何内容。我想区分返回文件的内容和没有返回文件的内容。
答案 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()