Для того, чтобы помочь другим с тем же вопросом: проблема вот в чем:
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)