子流程python-非零异常

子流程python-非零异常,python,subprocess,Python,Subprocess,我想为我的python脚本运行subprocess.check_输出方法 try: logger.info('Loading URL ' + line) wp_output = subprocess.checkout(['ruby', PATH + '/wpscan.rb', '--url', line, '--enumerate', 'vp', '--enumerate', 'vt']) print wp_output

我想为我的python脚本运行subprocess.check_输出方法

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)。

运行
子流程时。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
,将为您提供一个元组,其中包含命令返回的文本,无论该文本是否为错误。

这是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

当您直接从终端运行该命令时,是否有任何错误?@AnandSKumar否,它工作得很好wpscan.rb--url www.mywebsite.de--enumerate vp--enumerate vt--works perfect什么是
PATH
variable?config.ini[PATH]PATH=/wpscancool,谢谢:)嗯,但为什么它有错误?我认为Python运行的环境变量不同。这意味着它无法仅凭名称找到ruby。尝试使用Ruby可执行文件所在位置的确切路径作为第一个参数,看看这是否有区别。但是,如果找不到Ruby,它将永远不会执行代码,但它执行了wpscan,最后我得到了一个例外。你确定它执行了吗?或者你认为它执行了,因为脚本继续运行?子进程中的错误实际上不会像Python中的异常那样中断脚本(如果您这么想的话)。例如,如果我使用subprocess.call,我会在命令行中看到完整的代码。