来自 Python 运行 控制台中的 WinSCP 命令

From Python run WinSCP commands in console

我必须使用子进程从 Python class 运行 一些 WinSCP 命令。

目标是连接本地 Windows 机器和未安装 FTP 的 Windows 服务器并下载一些文件。这是我试过的

python    
proc = subprocess.Popen(['WinSCP.exe', '/console', '/WAIT',  user:password@ip:folder , '/WAIT','get' ,'*.txt'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

有了它,我可以打开 WinSCP 控制台并连接到服务器,但它不会执行 get 命令。问题是因为 get 是在 Windows 控制台上执行的,而不是在 WinSCP 控制台上执行的吗?

我也尝试用 winscp.exe /console 替换 winscp.com /command

有什么办法吗?

因此,当使用 /script 选项时,您应该指定一个包含批处理命令的文件。

要在命令行上指定所有命令,请使用 /command 选项而不是 /script

如果你不想生成脚本文件,你可以使用这样的代码:

import subprocess

process = subprocess.Popen(
    ['WinSCP.com', '/ini=nul', '/command',
     'open ftp://user:password@example.com', 'get *.txt', 'exit'],
    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in iter(process.stdout.readline, b''):  # replace b'' with '' for Python 2
    print(line.decode().rstrip())

代码使用:

  • /command switch to specify commands 在 WinSCP command-line;
  • winscp.com instead of winscp.exe, as winscp.com is a console application, so its output can be read by Python.

虽然使用数组作为参数将不起作用,但如果命令参数(如文件名)中有空格。然后你将不得不自己格式化完整的command-line。参见