Я пытаюсь использовать модуль подпроцесса python для ssh на сервере, а затем переключиться на суперпользователя, а затем ls и распечатать папки в терминале.Python subprocess stdout.readlines() get stuck
Мой код:
def sudo_Test():
HOST = 'Host'
PORT = '227'
USER = 'user'
cmd='sudo su - ec2-user;ls'
process = subprocess.Popen(['ssh','-tt','{}@{}'.format(USER, HOST),
'-p',PORT,cmd],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
process.stdin.write("my_password\r\n")
print "stuck here VVV"
result = process.stdout.readlines()
print "finished it"
if not result:
print "Im an error"
err = process.stderr.readlines()
print('ERROR: {}'.format(err))
else:
print "I'm a success"
print result
print sudo_Test()
выход консоли при запуске этого:
dredbounds-computer:folder dredbound$ python terminal_test.py
stuck here VVV
По какой-то причине код застревает на результат линии = process.stdout.readlines(). Мне нужно cntrl + c выйти из сеанса терминала, когда это произойдет. Он отлично работает, если я просто делаю cmd = 'sudo; ls 'вместо cmd =' sudo su - ec2-user; ls'.Anyone знаю, что я делаю неправильно или как я могу заставить это работать?
Обновление: Я изменил cmd = 'sudo su - ec2-user; ls' -> cmd = 'sudo su - ec2-user ls' в коде выше. Теперь я получаю следующее сообщение об ошибке:
['password\r\n', '\r\n', '/bin/ls: /bin/ls: cannot execute binary file\r\n']
Я не знаю, почему он думает, что Ls является двоичным файлом, в настоящее время, но в любом случае я могу сказать это, что это просто команда терминала, так что возвращает список каталогов?
Спасибо, просто попробовал это, и теперь я получаю следующую ошибку: ['my_password \ r \ n', '\ r \ n', '/ bin/ls:/bin/ls: невозможно выполнить двоичный файл \ r \ n'] Если я просто запустил «sudo -u ec2 -user ls "в терминале без кода. Я также получаю сообщение об ошибке: " bin/ls: невозможно выполнить двоичный файл " – dredbound
Поскольку ваш вопрос помечен' Linux', странно, что вы получаете линии конца DOS, '\ r \ n', в вашем выходе. Есть ли еще о вашей настройке, которую вы должны нам рассказать? – John1024
Нет, я так не думаю. Я работаю над Mac (OS X El Capitan). Если я сделаю sudo su вручную для пользователя ec2, а затем ls работает. – dredbound