Цитирование Net :: SSH2 :: Channel
Кроме того, можно также запустить удаленную оболочку (используя оболочку) и смоделировать команды печати взаимодействия пользователя с поток stdin и чтение данных обратно из stdout и stderr. Но такого подхода следует избегать, если это возможно; говорить с оболочкой сложно и, в общем, ненадежно.
blockquote>Кроме того, использование
ls
для определения наличия файла / каталога является хрупким и ненадежным. Вместо этого вы должны использовать файловые тестовые операции, напримерsub exec_remote($) { my($ssh2, $cmd) = @_; # every exec() requires a new channel my $chan = $ssh2->channel() or $ssh2->die_with_error; # send command to remote $chan->exec($cmd) or $ssh2->die_with_error; # we're done from our side $chan->send_eof; # ignore command output while (<$chan>) {} # wait for remote command to complete and return its exit status return $chan->exit_status; } sub copy_remote_if_necessary($$) { my($ssh2, $source, $destination, $file) = @_; if (exec_remote($ssh2, "/usr/bin/test -f ${destination}/${file}") ne 0) { die "Copy failed!\n" unless (exec_remote($ssh2, "cp ${source}/${file} ${destination}/") ne 0); } } copy_remote_if_necessary($ssh2, '/data/Directory1', '/data/Directory2', 'ABC.csv');
Я не использую pydev, но спадать до интерактивного REPL Python из кода:
import code
code.interact(local=locals())
Спадать до отладчика Python из кода:
import pdb
pdb.set_trace()
Наконец, для выполнения интерактивного REPL после выполнения некоторого кода можно использовать Python -i
переключатель:
python -i script.py
Это даст Вам подсказку Python после кода, даже если он выдаст исключение.
Вы можете сцеплять некоторые из тех решений в pydev, я думаю.
Существует специализированная Консоль Pydev доступная при нажатии на "Новой консоли", выпадающей в консольном представлении.