Как связать ssh, cd, затем выполнить в подпроцессе. Открыть - PullRequest
2 голосов
/ 21 октября 2011

Я пытаюсь выполнить следующий код, но он не работает

    p = subprocess.Popen("ssh root@IP cd /opt/msys/pe2/bin;./perlscript.pl; -a file.csv", 
                shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

   OR:
   p = subprocess.Popen("ssh root@IP /opt/msys/pe2/bin/perlscript.pl; -a file.csv", 
                shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

Проблема с первым заключается в том, что я могу связать команды после ssh. Второе - если я вызываю файл напрямую, аргумент -a не может найти этот файл, потому что я не в этом каталоге. Я надеялся использовать параметр cwd для Popen, но он не работает, потому что я не ssh'd на сервере.

Ответы [ 2 ]

3 голосов
/ 21 октября 2011

Попробуйте указать команду, отправляемую в ssh:

subprocess.Popen('ssh root@IP "cd /opt/msys/pe2/bin;./perlscript.pl;" -a file.csv'

В противном случае вы говорите локальной оболочке сделать это.

2 голосов
/ 22 октября 2011

Подпроцесс не лучший инструмент для этого варианта использования. Все параметры мониторинга процесса (например, wait () и terminate () ) применяются к локальному процессу (сеанс ssh), а не к тому, что происходит с удаленным сценарием (perl скрипт например).

Я использую fabric для обработки запущенных удаленных сценариев. Это проще в использовании, чем попытка связать воедино команды с подпроцессом .

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