我必须使用子进程从Python类运行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
。
有什么办法吗?
答案 0 :(得分:1)
因此,在使用/script
选项时,应指定一个包含批处理命令的文件。
要在执行操作时在命令行上指定所有命令,请使用/command
选项而不是/script
。
答案 1 :(得分:0)
如果您想在不生成脚本文件的情况下执行操作,则可以使用如下代码:
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在WinSCP命令行上指定commands; winscp.com
而不是winscp.exe
,因为winscp.com
是一个控制台应用程序,因此其输出可以是read by Python。