【问题标题】:python subprocess for multiple command in one process一个进程中多个命令的python子进程
【发布时间】:2017-08-28 02:00:46
【问题描述】:

我正在使用子进程将 ssh 会话连接到远程主机以执行多个命令。

我当前的代码:

 import subprocess
 import sys

 HOST="admin@10.193.180.133"
 # Ports are handled in ~/.ssh/config since we use OpenSSH
 COMMAND1="network port show"
 ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND1],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
 result = ssh.stdout.readlines()
 if result == []:
     error = ssh.stderr.readlines()
     print >>sys.stderr, "ERROR: %s" % error
 else:
      resp=''.join(result)
      print(resp)
COMMAND2="network interface show"

 ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND2],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
 result = ssh.stdout.readlines()
 if result == []:
     error = ssh.stderr.readlines()
     print >>sys.stderr, "ERROR: %s" % error
 else:
     resp=''.join(result)
     print(resp)

在上述情况下,我的代码要求我输入两次密码。

但我想要的是密码应该被询问一次并且必须执行多个命令。

请帮忙

【问题讨论】:

标签: python ssh subprocess


【解决方案1】:

您在代码中打开了两个连接,因此很自然您必须输入两次密码。

相反,您可以打开一个连接并传递多个远程命令。

from __future__ import print_function,unicode_literals
import subprocess

sshProcess = subprocess.Popen(['ssh', 
                               <remote client>],
                               stdin=subprocess.PIPE, 
                               stdout = subprocess.PIPE,
                               universal_newlines=True,
                               bufsize=0)
sshProcess.stdin.write("ls .\n")
sshProcess.stdin.write("echo END\n")
sshProcess.stdin.write("uptime\n")
sshProcess.stdin.write("echo END\n")
sshProcess.stdin.close()

查看here了解更多详情

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多