Используя shell=True
со списком, вы запускаете эквивалент
sh -c ssh -i /path/myKey.pem centos@myServer.com lsb_release -a
, который не , что вы хотите; он запускает ssh
, но использует -i
в качестве значения [116]
, а не первый аргумент ssh
. Это делает /path/myKey.pem
похожим на адрес хоста, к которому вы хотите подключиться.
Просто бросьте shell=True
.
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
Хотя это не проблема, предложение Клауса Д. передать lsb_release -a
в качестве единственного аргумента - это хорошая идея в целом. ssh
должен объединить их в одну строку, чтобы перейти к sh -c
на удаленном конце; может также сделать это самостоятельно, чтобы убедиться, что все сделано правильно.
cmd = ['ssh', '-i', '/path/myKey.pem', 'centos@myServer.com', 'lsb_release -a']
Очевидно, что он не встроен в язык, но есть множество дополнений, которые помогут вам в этом. Большинство из них являются бета-версиями, но вы можете внести свой вклад в них, а не создавать свои собственные
Тот, что в RubyForge, Дизайн по контракту для C , выглядит очень многообещающе. GNU Nana существует уже давно и, вероятно, удовлетворит ваши потребности. Надеюсь, что они полезны.
Редактировать: Проверить эту статью в O'Reily на Проектирование по контракту для C:
Не удовлетворены assert () и взволнован дизайн по контракту, я намеревался создать свой собственный дизайн Выполнение контракта на C. После глядя на некоторые решения доступно для Java 1 Я решил использовать подмножество ограничений объекта Язык для выражения контрактов [4]. Используя Ruby и Racc, я создал дизайн по контракту для C, генератор кода что превращает контракты, встроенные в C комментарии в коде C, чтобы проверить контракты.
Открытый исходный код: проверка.
Автоматическое доказательство теорем: проверка.
Вам действительно понравится Frama-C и его язык спецификаций ACSL . Возможно, вы уже слышали о его предке Кадуцей, но в настоящее время он считается вытесненным Frama-C / Jessie.