2015-07-31 3 views
0

Мне интересно, есть ли способ изменить текущий рабочий каталог на удаленном сервере с помощью модулей подпроцесса или pxssh. Целью этого является создание новых каталогов и копирование/вставка файлов. Кроме того, мне было бы полезно знать, есть ли способ сделать это в одном процессе. Выполнение приведенной ниже команды не помогает мне, потому что процесс завершается сразу же после завершения выполнения команды.Изменение рабочего каталога на удаленном месте

import subprocess 
p=subprocess.Popen(['ssh', '15.27.23.2','cd /home/incoming'], shell=True) 
p.wait() 

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

+0

если вы находитесь на POSIX, тогда не используйте 'shell = True' с аргументом списка; используйте одну строку (команду оболочки) или снимите «shell = True». – jfs

+0

вы можете [использовать 'pexpect' для запуска нескольких команд (обмениваться данными с удаленной оболочкой через ssh)] (http://stackoverflow.com/a/15913906/4279). Или используйте 'paramiko.SFTPClient' для выполнения операций с файлами. – jfs

+0

[пример кода paramiko: загрузить все файлы из удаленной папки - он показывает, как изменить локальные/удаленные каталоги] (http://stackoverflow.com/a/20381739/4279). Вот еще один пример кода paramiko: он показывает, как создавать удаленные каталоги] (http://stackoverflow.com/a/20294079/4279) – jfs

ответ

2

Как вы заметили, программа создает SSH-соединение с удаленным хостом, где он запускает оболочку, а затем (потому что больше нет команд) немедленно завершается. Каждый процесс имеет свой «текущий каталог», включая процесс, который вы запускаете на удаленной машине.

Очевидно, что один из способов отправит более длинную командную строку, которая включает в себя mkdir, cd, а затем команды, которые вы хотите запустить.

Лучшим способом было бы изучить использование fabric, которое имеет возможности для запуска произвольных удаленных команд в требуемом контексте. Конкретная проблема, с которой вы сталкиваетесь, адресуется на this documentation page, и это само по себе может показать вам, как продолжать использовать команды, такие как mkdir project && cd project && do-something.

+0

Я хотел бы создать новую папку в/home/incoming, copy/paste files и выполнить программы в этом месте. Есть ли способ сделать это в одном процессе? – user5142625

+0

Да, я понимаю, что ошибся, когда сказал, что «ничего не происходит» – user5142625

+0

Thnaks. Я редактировал свой вопрос. – user5142625

Смежные вопросы