【发布时间】: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 函数。
如何让它按顺序执行?提前致谢!
【问题讨论】: