subprocess.CalledProcessError ... возвращает ненулевое состояние выхода 2 - PullRequest
0 голосов
/ 10 июня 2018

Я делаю скрипт на python, чтобы выполнить команду оболочки и затем обработать вывод.Я хочу выполнить эту команду:

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

Я проверил подобные вопросы, но они не решили проблему.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Какой ключ ты хочешь получить ??Ниже приведен пример использования urllib2 & json

import urllib2 , json

data = json.load(urllib2.urlopen("https://api.github.com/users/test/repos?per_page=200"))
for repos in data:
    print repos["name"]
0 голосов
/ 10 июня 2018

отсутствует пробел в команде awk-F из-за пропущенной запятой в 'awk' '-F'

вы можете использовать одну строку вместо массива?это может быть менее подвержен ошибкам IMHO

subprocess.check_output('curl https://...')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...