【问题标题】:change filepath in windows with paramiko [duplicate]使用 paramiko 更改 Windows 中的文件路径 [重复]
【发布时间】:2020-12-07 15:28:07
【问题描述】:

对不起,如果这篇文章可能与其他人重复。我搜索了其他帖子,似乎没有找到我的答案。

这是我第一次使用 python paramiko。

我想用它在 Windows Server 2018 的虚拟机上的特定文件路径上执行 python 脚本。

文件路径为:“C:\Users\mirel.voicu\Desktop\script.py”。 当我连接 Putty 和 paramiko 时,ssh 连接按预期工作。

当使用 paramiko 并发送命令“cd”时,它首先返回“C:\Users\mirel.voicu”

如果我想更改路径而不是“cd”,并为“C:\Users\mirel.voicu\Desktop”发送命令,它会返回一个空白字符串或字节码。

我想我的错误是我传递文件路径的方式。我应该如何编写要被 paramiko 接受的文件路径字符串?

【问题讨论】:

  • “如果我想更改路径并发送“C:\Users\mirel.voicu\Desktop”的命令而不是“cd”,它会返回一个空白字符串或字节码。”——没错。 Windows(也不是 *nix)cd 命令不打印任何内容。虽然以这种方式执行cd 命令是没有意义的。所以我猜这是XY problem。你可能正在寻找这个:Execute multiple commands in Paramiko so that commands are affected by their predecessors.
  • 嗨,我读到了这种将单个命令字符串以 ; 分隔的方法。我理解它,但不要说一开始我只想更改工作目录。我的问题似乎是当我将“cd path/to/file”传递给 paramiko 并针对 windows CLI 而不是 linux CLI 时。在互联网上的任何地方,我都发现大多数使用 linux 命令的示例都可以正常工作,但如果我对 paramiko 中的 Windows 终端说“cd path/to/file”,它就不会接受。相同的命令“cd path/to/file”直接在 Windows 的 putty CLI 中执行得很好。将继续搜索
  • “它不接受它” – 你的意思是什么?你是怎么发现的?再一次,cd 命令(在 Windows 和 Linux 上)根本没有任何输出。所以完全没问题,预计out.read() 返回一个空字符串。
  • 如果您看到上面的屏幕截图,其中命令只是“cd”,stdout.read().decode() 返回一个字符串。
  • 是的,我通常使用 cd 路径来更改 CLI 中的工作目录。我想我正在寻找与 paramiko exec_command 相同的方法。但正如我所见,这里的工作方式不同

标签: python-3.x paramiko


【解决方案1】:

在查看了上面推荐的链接并执行了一些测试后,我终于理解并找到了我正在寻找的正确语法。

对不起,我可能不太清楚。

我将尝试先描述我的目的,然后发布代码:

  • 通过远程 Windows CLI 上的 paramiko 远程更改 CWD
  • 在我的电脑本地控制台查看远程CWD新更改路径的输出字符串。
  • 更改远程 cwd 后,我还想执行一些 python 脚本,并通过 paramiko 在本地控制台窗口中返回执行结果。

修改远程cwd的文件路径并查看结果字符串的代码:

command = "cd C:/Users/mirel.voicu/Desktop&&cd"
stdin, out, err = ssh.exec_command(command)
print (out.read().decode())

远程更改文件路径并执行python脚本的命令:

command = "cd C:/Users/mirel.voicu/Desktop&&python script.py"
stdin, out, err = ssh.exec_command(command)
print (out.read().decode())

如果您在运行脚本之前先激活一个虚拟环境,它也可以很好地工作:

command = "cd C:/Users/mirel.voicu/Desktop&&conda activate v_env&&python script.py&&conda deactivate"
stdin, out, err = ssh.exec_command(command)
print (out.read().decode())

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 2019-07-27
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2021-10-24
    • 2017-12-15
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多