首页 > 解决方案 > subprocess.CalledProcessError... 返回非零退出状态 2

问题描述

我正在制作一个 python 脚本来执行一个 shell 命令,然后处理输出。我想执行这个命令:

curl "https://api.github.com/users/username/repos?per_page=200" | grep -o 'git@[^"]*'| awk -F "/" '{print $2}'| awk -F "." '{print $1}'

我正在使用subprocess.check_output类似的方法:

with open(os.devnull,'w') as devnull:
    f=subprocess.check_output(['curl', 'https://api.github.com/users/username/repos?per_page=200', '|', 'grep', '-o', 'git@[^"]*','|', 'awk' ,'-F' ,'/', '{print $2}' ,'|' ,'awk', '-F', '.' ,'{print $1}'],stderr=devnull)
    res=ujson.loads(f)
    data=res.get('items')
    print(data[0].get('login'))

但它给出了以下错误:

subprocess.CalledProcessError: Command '['curl', 'https://api.github.com/users/username/repos?per_page=200', '|', 'grep', '-o', 'git@[^"]*', '|', 'awk-F', '/', '{print $2}', '|', 'awk', '-F', '.', '{print $1}']' returned non-zero exit status 2

我检查了类似的问题,但他们没有解决问题。

标签: pythonjsonsubprocess

解决方案


awk-F由于缺少逗号,命令中缺少空格'awk' '-F'

您可以使用单个字符串而不是数组吗?恕我直言,这可能不太容易出错

subprocess.check_output('curl https://...')

推荐阅读