来自 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。参见 。
我必须使用子进程从 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 ofwinscp.exe
, aswinscp.com
is a console application, so its output can be read by Python.
虽然使用数组作为参数将不起作用,但如果命令参数(如文件名)中有空格。然后你将不得不自己格式化完整的command-line。参见