Как отправить несколько входов в удаленную оболочку, используя подпроцесс - PullRequest
2 голосов
/ 30 сентября 2011

Я пытаюсь запустить несколько команд на удаленном компьютере после выполнения команды ssh для этого компьютера и затем запуска команд на его терминале.

Я хочу использовать подпроцесс для этой работы. Поэтому я написал следующую команду: -

import subprocess
process = subprocess.Popen(['ssh', 'rahul@172.20.70.121'], shell=False, stdin=subprocess.PIPE)

Теперь я получаю терминал удаленного компьютера и передаю следующую команду, которая выполняется на этом компьютере: -

print process.communicate('python test.py /home/rahul/vPath-dissector')

Но когда я снова вызываю последнюю вызванную команду, выдается ошибка: -

print process.communicate('python temp.py /home/rahul/vPath-dissector')
   Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib/python2.6/subprocess.py", line 690, in communicate
   self.stdin.write(input)
   ValueError: I/O operation on closed file

Итак, какую команду я могу использовать для отправки нескольких команд без закрытия файла ???

Ответы [ 3 ]

2 голосов
/ 01 апреля 2012

Пытаясь найти ответ на ту же проблему, я в итоге использовал pexpect вместо подпроцесса.

import pexpect

ssh = pexpect.spawn('ssh rahul@172.20.70.121')

prompts = [">", "#", "\$", "}", '%', pexpect.TIMEOUT]
ssh.sendline('echo Hello')
ssh.expect(prompts)
print ssh.before

Для конкретных ssh есть даже pxssh .

0 голосов
/ 30 сентября 2011

Когда у меня была похожая проблема несколько лет назад, я использовал рецепт из Python Cookbook.По-видимому, теперь он также доступен из Pypi , но я не знаю, является ли он точно таким же кодом или нет.

0 голосов
/ 30 сентября 2011

Не уверен, полезно ли это вам, поскольку вы явно просили подпроцесс. Открыть - тем не менее, вы можете просто выполнить удаленную команду из оболочки, используя

ssh rahul@172.20.70.121 python test.py /home/rahul/vPath-dissector

и, конечно, из питона с

os.system("ssh rahul@172.20.70.121 python test.py /home/rahul/vPath-dissector")

Вы также можете зафиксировать вывод этой команды.

Извините, если я пропустил вашу мысль, хотя ...

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