подпроцесс в python, показывающий ошибку атрибута - PullRequest
0 голосов
/ 01 мая 2019

код ниже показывает ошибку атрибута при запуске кода ниже.подпроцесс импорта import sys import shlex

cmd = 'mtr -nrc30 -s1400 -z'
cmd = shlex.split(cmd)
abc = shlex.split(sys.argv[1])
subprocess.call([cmd,abc])

ошибка, которую я получаю, приведена ниже.Что может быть причиной этого, когда оба входа в подпроцесс преобразуются в список

AttributeError: у объекта 'list' нет атрибута 'rfind'

1 Ответ

1 голос
/ 01 мая 2019

Для того, чтобы помочь другим с тем же вопросом: проблема вот в чем:

subprocess.call([cmd, abc])

где abc - это список аргументов, которые вы хотите дать программе, указанной в cmd, которые были переданы вашей программе через sys.argv. То, к чему ваш текущий код распаковывается, выглядит следующим образом:

# assume abc == ['arg1', 'arg2', ...]
subprocess.call([['mtr', '-nrc30', '-s1400', '-z'], ['arg1', 'arg2', ...]])

Это не работает, потому что это вложенный список. Подпроцесс принимает только строки или список строк - поэтому, чтобы он работал, вам действительно нужно

subprocess.call(['mtr', '-nrc30', '-s1400', '-z', 'arg1', 'arg2', ...])

Это можно получить, просто объединив два списка с помощью +:

subprocess.call(cmd + abc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...