【问题标题】:pexpect not executing command by stepspexpect 不按步骤执行命令
【发布时间】:2016-10-13 02:33:09
【问题描述】:

我有这个使用 Pexpect 的 Python3 代码。

import pexpect
import getpass
import sys

def ssh(username,password,host,port,command,writeline):
    child = pexpect.spawn("ssh -p {} {}@{} '{}'".format(port,username,host,command))
    child.expect("password: ")
    child.sendline(password)
    if(writeline):
        print(child.read())

def scp(username,password,host,port,file,dest):
    child = pexpect.spawn("scp -P {} {} {}@{}:{}".format(port,file,username,host,dest))
    child.expect("password: ")
    child.sendline(password)

try:
    filename = sys.argv[1]
    print("=== sendhw remote commander ===")
    username = input("Username: ")
    password = getpass.getpass("Password: ")
    ssh(username,password,"some.host.net","22","mkdir ~/srakrnSRV",False)
    scp(username,password,"some.host.net","22",filename,"~/srakrnSRV")
    ssh(username,password,"some.host.net","22","cd srakrnSRV && sendhw {}".format(filename),True)

except IndexError:
    print("No homework name specified.")

我的目标是:

  • 通过ssh函数SSH进入主机,创建目录srakrnSRV,然后
  • 将文件上传到先前创建的srakrnSRV 目录中
  • cd 转换为srakrnSRV,并执行sendhw <filename> 命令。 filename 变量由命令行参数定义,并将结果打印出来。

运行整个代码后,Python 打印出来

b'\r\nbash: line 0: cd: srakrnSRV: No such file or directory\r\n'

这不是预期的,因为该目录应该是之前创建的。

另外,我尝试在远程主机中手动创建srakrnSRV 文件夹。再次运行该命令后,似乎scp 函数也没有运行。唯一运行的 pexpect coomand 是最后一个 ssh 函数。

如何让它按顺序执行?提前致谢!

【问题讨论】:

    标签: python ssh pexpect


    【解决方案1】:

    您可能缺乏通过 ssh 执行命令的权限。此外,您的程序也有可能在提示出现之前发送 scp。

    【讨论】:

      猜你喜欢
      • 2023-01-17
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      相关资源
      最近更新 更多