2013-03-21 3 views
0

Я хочу вызвать несколько команд в Python. Я установил шпаклевку в Windows.python subprocess popen run multiple command

  1. SSH в Linux машине

    ssh_command_string: plink -i yourppk.ppk [email protected] 
    
  2. вызовите команду из этой машины, которая будет генерировать файл

    export_project_command_string: ./AppManage -export -out /opt/notme-Facebook.xml -app "Silver Fabric/notme-FacebookPostsExtraction0118" -user username-pw password -domain ion 
    
  3. скачать этот файл

    download_command_string: pscp -scp -i yourppk.ppk [email protected]:/opt/notme-Facebook.xml d:\ 
    

Эти команды в порядке, когда я тестирую их один за другим, но я не знаю, как их вызывать на Python все сразу.

Я попытался следующий код, но не повезло:

LINE_BUFFERED = 1 
    #NOTE: the first argument is a list 
    p = Popen(['cat'], shell = True, bufsize=LINE_BUFFERED, stdin=PIPE, stdout = PIPE, stderr = PIPE) 
    for cmd in [ssh_command_string, cd_command_string, export_project_command_string, download_command_string]: 
     time.sleep(1) # a delay to see that the commands appear one by one 
     p.stdin.write(cmd) 
     p.stdin.flush() 
    # even without .flush() it works as expected on my machine 
    p.stdin.close() 
+0

Это может быть полезно для вас: [Что является самым простым способом для SSH с использованием Python?] (Http://stackoverflow.com/q/1233655/222914) –

+0

это неправильный способ соединить процесс. но я думаю, что вы забыли использовать Popen.comunicate для отправки вашей команды процессу ... с вашим кодом, если удаленная оболочка отправит вам какой-то текст, ваш буфер будет заполнен, и процесс будет ждать, чтобы его выпустить, но вы не 't читайте p.stdout/p.stderr, поэтому удаленный процесс ждет навсегда – ornoone

ответ

0

взгляд на fabric чтобы выполнять повторяющиеся/автоматические задачи на сервере.

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