python - ssh 与 Subprocess.popen

标签 python ssh subprocess

大家好,我遇到了一个小问题。可能是我遗漏了一些明显的东西,但我无法找出问题所在。我有 GUI,其中有一个名为“erp”的按钮,如果我按下它,它应该首先对名为(主机 ID 名称)'ayaancritbowh91302xy' 的机器执行 ssh然后它应该执行像 (cd change dir) 和 'ls -l' 这样的命令。我尝试了以下代码:

def erptool():
    sshProcess = subprocess.Popen(['ssh -T', 'ayaancritbowh91302xy'],stdin=subprocess.PIPE, stdout = subprocess.PIPE)
    sshProcess.stdin.write("cd /home/thvajra/transfer/08_sagarwa\n")
    sshProcess.stdin.write("ls -l\n")
    sshProcess.stdin.write("echo END\n")
    for line in stdout.readlines():
        if line == "END\n":
        break
        print(line)

我收到以下错误:

Traceback (most recent call last):
  File "Cae_Selector.py", line 34, in erptool
    for line in stdout.readlines():
NameError: global name 'stdout' is not defined
Pseudo-terminal will not be allocated because stdin is not a terminal.

如何做到这一点?谁能帮我解决这个问题?

最佳答案

试试这个:

#!/usr/bin/env python
import subprocess
def erptool():
    sshProcess = subprocess.Popen(['ssh', '-T', 'ayaancritbowh91302xy'],
                                  stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    out, err = sshProcess.communicate("cd /home/thvajra/transfer/08_sagarwa\nls -l\n")
    print(out),
erptool()

我添加了 -T 这样 ssh 就不会尝试分配伪终端,并通过使用通信避免 END 和标准输出问题。

关于python - ssh 与 Subprocess.popen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227791/

相关文章:

python - 无法在具有无限循环的 boost.python 模块中通过 Ctrl-c 终止进程

hadoop - hadoop从属群集上的TaskTracker无法启动。无法连接到主机

python - 如何运行后台进程并且*不*等待?

python - 如何从外部程序获取输出并将其放入Python中的变量

python - 无法读取 key 以将 boto 与 s3 结合使用 - Windows Anaconda

python - 使用带过滤器的 Pandas 写入 csv

javascript - Python:登录到网页并单击没有 Selenium 的按钮

git - 从服务器 pull Git

linux - 从 Linux 通过 SSH 连接到 Mac OS X(使用 XForwarding)时如何运行 Emacs?

python - 通过 Python 打印日历。代码不起作用=/