gpt4 book ai didi

python - 使用 pexpect scp 到远程服务器

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:04 25 4
gpt4 key购买 nike

我正在尝试学习一些预期:特别是我正在尝试将文件从我的笔记本电脑复制到远程服务器。我遇到了一个奇怪的行为:如果我逐行编写相同的代码或多或少会起作用,但如果我将它作为脚本运行则不会。这是我逐行写的:

child = pexpect.spawn('scp pathdir/file.ext username@hostname:pathdir')
r=child.expect ('assword:')
r

它返回 0,我用密码完成了工作

child.sendline ('password')

当我对服务器执行 ssh 操作时,我在那里找到了我的文件。所以我将所有步骤收集在一个脚本中;它退出时没有错误,但是文件没有被复制……为什么?但更重要的是,我该如何解决这个问题?

这是脚本:

child = pexpect.spawn('scp pathdir/file.ext username@hostname:pathdir')
r=child.expect ('assword:')
print r
if r==0:
child.sendline ('password')
child.close()

我不确定 pexpect 是如何工作的,所以我打印 r 以确保它是 0。它确实是。

最佳答案

我最近遇到了“同样”的问题。我是这样做的。我希望这一定会对你有所帮助。

你的问题:我不确定 pexpect 是如何工作的,所以我打印 r 以确保它是 0。它是。

是的,它是零。

试试下面的代码:

    try:
var_password = "<YOUR PASSWORD>" Give your password here
var_command = "scp pathdir/file.ext username@hostname:pathdir"
#make sure in the above command that username and hostname are according to your server
var_child = pexpect.spawn(var_command)
i = var_child.expect(["password:", pexpect.EOF])

if i==0: # send password
var_child.sendline(var_password)
var_child.expect(pexpect.EOF)
elif i==1:
print "Got the key or connection timeout"
pass

except Exception as e:
print "Oops Something went wrong buddy"
print e

child.expect 可以接受多个参数。在这种情况下,您必须以列表的形式发送这些参数。在上面的场景中,如果 pexpect.spawn 的输出是“password:”,那么 i 将得到 0 作为输出,如果遇到 EOF 而不是“password”,那么值i 将为 1。

我希望这能消除您的疑虑。如果没有,请告诉我。我会尽量加强对你的解释。

关于python - 使用 pexpect scp 到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22237486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com