Python 连接到ssh时如何执行子进程

Python 连接到ssh时如何执行子进程,python,ssh,Python,Ssh,我在使用python连接ssh时遇到一些困难。任何帮助都将不胜感激。连接到ssh实例后,我想通过以下路径: ~$ su liquidity (base) liquidity@beast:/home/xxxxxxx$ cd ~/liquidity-analytics (base) liquidity@beast:~/liquidity-analytics$ source activate pluto (pluto) liquidity@beast:~/liquidity-analytics$ py

我在使用python连接ssh时遇到一些困难。任何帮助都将不胜感激。连接到ssh实例后,我想通过以下路径:

~$ su liquidity
(base) liquidity@beast:/home/xxxxxxx$ cd ~/liquidity-analytics
(base) liquidity@beast:~/liquidity-analytics$ source activate pluto
(pluto) liquidity@beast:~/liquidity-analytics$ python
但我的计划给我一个错误:

FileNotFoundError: [Errno 2] No such file or directory: '~$ su': '~$ su'
我的代码:

import subprocess
import sys
import pluto as pl

HOST = 'ssh -p 444 XXXXXXX@XXX.XXX.XX.XXX'

ssh = subprocess.Popen(["ssh", "%s" % HOST],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
result = ssh.stdout.readlines()

a = subprocess.call(['~$ su', 'liquidity'])
print(a)

当您通过ssh连接到其他主机时,连接将建立并关闭。您应该输入一个命令或一个命令来启动脚本,如:

ssh = subprocess.Popen(["ssh", "%s" % HOST, "ls"],
               shell=False,
               stdout=subprocess.PIPE,
               stderr=subprocess.PIPE)
或:

在这个(python)脚本中,您可以执行其他命令

编辑: 好的,您需要切换到用户“liquidity”,然后在ssh连接中执行此操作。对于其他命令,使用新变量cmd

cmd = "cd ~/liquidity-analytics; "
cmd += "source activate pluto; "
cmd += "python; "
ssh = subprocess.Popen(["ssh", "liquidity@%s" % HOST, cmd],
           shell=False,
           stdout=subprocess.PIPE,
           stderr=subprocess.PIPE)

谢谢你的回答。我知道文件的路径应该在一个命令中。但我的问题是激活一个模块。因此,我将路径设置为“/code>”/liquidity/liquidity analytics“,但是我应该如何激活模块以导入它呢?再次感谢。这是一个很好的改进,但我仍然无法导入pluto包并将其与pandas或其他python包一起使用。您应该阅读linux程序“expect”或python包“pexpect”。那会给你你想要的。请参见此处的示例:
cmd = "cd ~/liquidity-analytics; "
cmd += "source activate pluto; "
cmd += "python; "
ssh = subprocess.Popen(["ssh", "liquidity@%s" % HOST, cmd],
           shell=False,
           stdout=subprocess.PIPE,
           stderr=subprocess.PIPE)