执行WinSCP脚本时,subprocess.Popen中的Python双引号不起作用

jippyjoe4

我正在尝试使用此处的代码https://stackoverflow.com/a/56454579将文件从Windows 10上的Python用WinSCP上传到服务器。该代码如下所示:

import subprocess
path = r'C:\mp4s\Sci-Fi Light Flicker.mp4'

process = subprocess.Popen(
  ['C:\Program Files (x86)\WinSCP\WinSCP.com', '/ini=nul', '/command', 'option batch abort', 'option confirm off', 'open ftp://user:[email protected]', f'put "{path}"', 'exit'],
  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in iter(process.stdout.readline, b''):
  print(line.decode().rstrip())

我得到的输出:

batch           abort
confirm         off
Connecting to ftp.website.com ...
Connected
Starting the session...
Session started.
Active session: [1] [email protected]
File or folder '\C:\mp4s\Sci-Fi' does not exist.
System Error.  Code: 123.
The filename, directory name, or volume label syntax is incorrect
(A)bort, (R)etry, (S)kip, Ski(p) all: Abort

这告诉我该put命令没有正确处理文件名中的空格。我需要进行哪些更改才能使其正常工作?删除路径周围的双引号会给我一个不同的错误(它认为我正在尝试上传多个文件)。

马丁·普里克里(Martin Prikryl)

我认为您不能使用数组为WinSCP提供参数。subprocess.Popen转义使用反斜杠在参数双引号,有什么冲突转义双双引号由WinSCP赋予的预期。

您将必须自行格式化WinSCP命令行:

args =  "\"C:\Program Files (x86)\WinSCP\WinSCP.com\" /ini=nul " + \
       f"/command \"open ftp://user:[email protected]\" \"put \"\"{path}\"\"\" exit"

(请注意,我已经省略了您的option命令,因为无论如何它们都是默认的)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Subprocess.Popen中的Python双引号在Windows 10上不起作用

为什么双引号在 awk 脚本中的 cmd 内的 echo 语句中不起作用?

引号在脚本中不起作用

Python subprocess.Popen:使用“>”重定向不起作用

subprocess.popen在pyqt中不起作用

带空格双引号的批处理脚本路径不起作用

Shellcheck 对双引号变量的建议在管道切割时不起作用

subprocess.Popen robocopy在args是序列时不起作用

引号在批处理脚本中不起作用

在 Oracle 中执行脚本时 nextval 不起作用

当 PHP 中的 shell_exec() 执行脚本时,Python open() 函数不起作用

python 导入在脚本中不起作用

双引号单引号在 PHP/JavaScript 中不起作用

subprocess.Popen() 中的 ADB 命令 exec-out 不起作用

为什么`script.py <(cat * .gz)`在python 2中与subprocess.Popen一起使用,但在python 3中却不起作用?

subprocess.popen()执行Python脚本但不写入文件

在python中将双引号shell命令传递给subprocess.Popen()?

sed:替换双引号在终端中不起作用

将引号传递给 c# 代码中的 powershell 脚本不起作用

在 bash 脚本中执行 virtualenv 或 pip 时,trap INT 不起作用

从SSIS执行的PowerShell脚本中引用WinSCP.exe

脚本文件执行正常,但使用WinSCP在SSIS中失败

Tar-排除当popen(shell = False)时不起作用

在Apple脚本中添加双引号(“)以执行shell脚本

在python中抓取时双引号字符串内的双引号

双引号内的Awk不起作用

双引号的转义序列不起作用

JSON转义双引号不起作用

为什么有时在 PowerShell(以及命令提示符)中使用单引号将命令括在 `python -c [command]` 中时不起作用?