>>> import subprocess
>>> subprocess.check_output("smartctl -d ata -a /dev/sda", shell=True)
"output of above command prints normally"
>>> subprocess.check_output("smartctl -d ata -a /dev/sdb", shell=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 544, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'smartctl -d ata -a /dev/sdb' returned non-zero exit status 64
Может кто-нибудь объяснить мне, почему приведенная выше команда с sda работает нормально, но возвращает ошибку с помощью sdb? sdc также работает для записи. Кроме того, я знаю об опасности использования shell = True. Я изучаю python и сталкивался с этой проблемой при написании тестового скрипта.python subprocess.check_output возвращает CalledProcessError для некоторых команд
Интересно, что код имеет следующую ошибку: NameError: name 'CalledProcessError' не определен. отредактируйте его на subprocess.CalledProcessError. – user2503227
Спасибо, я отредактировал свой ответ. В качестве альтернативы вы можете написать 'from subprocess import CalledProcessError' перед моей частью кода. –
Когда я перехожу к subprocess.CalledProcessError и печатаю e.output, я получаю вывод команды smartctl с кажущимися ошибками. Странно, это как-то ожидалось? – user2503227