Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Python)通过跳转框连接子流程管道/运行命令_Python_Command_Subprocess - Fatal编程技术网

(Python)通过跳转框连接子流程管道/运行命令

(Python)通过跳转框连接子流程管道/运行命令,python,command,subprocess,Python,Command,Subprocess,因此,我想使用python在服务器上运行命令,但要做到这一点,我必须通过另一个框。我通过子流程运行ssh连接到第一个框。但是,我不确定如何进入第二个框并通过该子流程对象运行命令 我的子流程语句: command = "ssh servername" sshConnection = subprocess.Popen(command.split(),stderr=subprocess.PIPE ,stdout=subprocess.

因此,我想使用python在服务器上运行命令,但要做到这一点,我必须通过另一个框。我通过子流程运行ssh连接到第一个框。但是,我不确定如何进入第二个框并通过该子流程对象运行命令

我的子流程语句:

command = "ssh servername"
sshConnection = subprocess.Popen(command.split(),stderr=subprocess.PIPE
                                  ,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
我能想到的唯一方法是:

以某种方式连接两个子流程命令的管道? 首先建立一个SSH隧道,然后通过它运行命令? 还有其他想法吗?我这样做是不对的吗?

那么:

cmd = "mycmd myarg1 myarg2"
ssh_command = "ssh servername %s" % cmd
sshConnection = subprocess.Popen(ssh_command.split(),stderr=subprocess.PIPE
                                  ,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
当然,如果命令包含特殊字符,还需要对其进行shell转义

我个人喜欢的一个更巧妙的选择是使用。您可以嵌套远程(ssh)命令。

如果“通过另一个框”是指“启动从jumpbox到服务器的ssh连接”,请尝试:


由于您正在使用子流程执行大量ssh,我建议您应该使用

执行后,我可以在不关闭ssh连接的情况下执行此操作,并且能够继续发送命令和获取输出吗?谢谢!唯一的问题是,我想保持SSH会话打开,以便继续发送命令。我担心每次运行命令时重新建立SSH会话的资源使用情况。此外,我不能将第三方模块用于此项目:/
command = "ssh jumpbox ssh servername /bin/ls -l"
sshConnection = subprocess.Popen(command.split(),stderr=subprocess.PIPE
                              ,stdout=subprocess.PIPE,stdin=subprocess.PIPE)