gpt4 book ai didi

python - 为什么 pysftp 库中的 chdir 不影响 pysftp 库中的执行?

转载 作者:行者123 更新时间:2023-12-02 14:07:14 26 4
gpt4 key购买 nike

我使用 pysftp(它是 paramiko 的包装器)。

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
sftp=pysftp.Connection(host='hostname',username="root",password="pass",cnopts=cnopts)

/home/alex_test 中的脚本,我想执行该脚本
sftp.chdir("/home/alex_test")
sftp.execute("source myscript.tcsh")

但它不起作用,因为找不到脚本。

另一方面,它确实有效
sftp.execute("cd /home/alex_test;cat myscript.tcsh")

为什么 ?
我的目标是为 unix 和 Windows 创建一个通用代码。

最佳答案

.execute方法实际上与SFTP无关。它在内部打开一个单独的“exec”SSH channel 。该 channel 与“SFTP”子系统 channel 完全隔离。

如果你直接使用 Paramiko 库会更清楚,因为在那里你会清楚地看到 Paramiko SSHClient.exec_command method (由 pysftp .execute 内部使用)不使用 Paramiko SFTPClient class一点也不。

实际上甚至是 .execute method 的文档说:

Execute the given commands on a remote machine. The command is executed without regard to the remote pwd.



而且 SFTP 协议(protocol)本身并没有工作目录的概念。

pysftp(或实际上是底层的 Paramiko 库)仅在本地模拟。您传递给 pysftp/Paramiko 库 SFTP 方法的所有相对路径在发送到 SFTP 服务器之前都会转换为绝对路径。对于 pysftp,这意味着几乎所有方法(适用于远程路径),但 .execute 除外。 .这种转换是可能的,因为 SFTP 协议(protocol)要求使用 *nix 样式路径(即使实际的远程服务器系统使用不同的语法)。所以 pysftp/Paramiko 知道如何将相对路径转换为绝对路径。

相反,传递给 .execute 的命令方法完全使用服务器的专有语法在服务器上执行。本 map 书馆无法理解并以某种方式神奇地转换它。

关于python - 为什么 pysftp 库中的 chdir 不影响 pysftp 库中的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48840397/

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