我想为我的python脚本运行subprocess.check_output方法。
try:
logger.info('Loading URL ' + line)
wp_output = subprocess.checkout(['ruby', PATH + '/wpscan.rb', '--url', line, '--enumerate',
'vp', '--enumerate', 'vt'])
print wp_output
logger.info(wp_output)
return wp_output.strip()
except KeyboardInterrupt:
raise
except subprocess.CalledProcessError, e:
logger.exception('ERROR - Problem occurred while using wpscan.')
例外:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 573, in check_output
raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command '[u'ruby', u'./wpscan/wpscan.rb', u'--url', 'www.website.de', u'--enumerate', u'vp', u'--enumerate', u'vt']' returned non-zero exit status 1
如果我运行check_output我得到一个非零异常,如果我只使用“subprocess.call”我得到结果“print wp_output”只有int 1 ??
我做错了什么?我想将输出作为字符串(wp_output)。
答案 0 :(得分:1)
运行subprocess.call
时,返回一个表示程序退出代码的int。通常,0表示一切正常,其他数字(例如1)表示错误。
subprocess.check_output
会将错误视为python本身的异常,并将其提升,从而产生结果。
如果您希望字符串输出是错误还是成功,请使用Popen
。
command = ['ruby', PATH + '/wpscan.rb', '--url', line, '--enumerate',
'vp', '--enumerate', 'vt']
wp_output = subprocess.Popen(command, stdout=subprocess.PIPE)
wp_output = wp_output.communicate()
print wp_output
将Popen
与subprocess.PIPE
一起使用,然后在其上运行communicate
将为您提供一个元组,其中包含您的命令返回的文本,无论是否是错误。
答案 1 :(得分:0)
这是SuperBiasedMan评论的补充。重定向stderr也会很好,因为错误通常出现在stderr而不是stdout。
command = ['ruby', PATH + '/wpscan.rb', '--url', line, '--enumerate',
'vp', '--enumerate', 'vt']
wp_proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
wp_output, wp_error = wp_proc.communicate()
if wp_error != '':
print wp_error
else:
print wp_output