繁体   English   中英

使用参数在 Python 中运行 WinSCP 脚本

[英]Run WinSCP script in Python with parameters

我正在尝试运行具有参数“%1%”的 WinSCP 脚本。 我在 cmd 中运行脚本如下,它运行良好:

>"C:\\Program Files (x86)\\WinSCP\\WinSCP.com" /script=<filepath> /log=<logpath> /parameter <param1>

但是,如果我在 Python 中将其作为子进程运行,我不知道如何传递 param1 值。 我究竟做错了什么? 我试过:

cmdFile = <filepath>
logfile = <logpath>
param = <param1>
subprocess.run(["C:\Program Files (x86)\WinSCP\WinSCP.com", "/script=" + cmdFile, "/log=" + logfile, param]  , shell=True)
subprocess.run(["C:\Program Files (x86)\WinSCP\WinSCP.com", "/script=" + cmdFile, "/log=" + logfile, "/parameter " + param]  , shell=True)
subprocess.run(["C:\Program Files (x86)\WinSCP\WinSCP.com", "/script=" + cmdFile, "/log=" + logfile, "/parameter //" + param]  , shell=True)```

这是一个独立的示例,可以解决您的问题,并且可以通过运行一些小型本地 ftp 主机(如 ftpdmin( https://www.sentex.ca/~mwandel/ftpdmin/ ,无附属关系)来轻松测试):

import subprocess

# create a test file
test_fn = 'test.txt'
with open(test_fn, 'w') as f:
    f.write(
        'Hello\n'
        'World\n'
    )

# create a script for WinSCP
script_fn = 'commands.txt'
with open(script_fn, 'w') as f:
    f.write(
        'open ftp://anonymous:@localhost\n'
        'put "%1%"\n'
        'put "%2%"\n'
        'exit'
    )

log_fn = 'log.txt'
# parameters to pass to the script (uploading the test file and the script)
parameters = [test_fn, script_fn]
# the adjusted command, passing '/parameter' and then just the parameters
subprocess.run([
    'C:\Program Files (x86)\WinSCP\WinSCP.com',
    '/script=' + script_fn,
    '/log=' + log_fn,
    '/parameter'
] + parameters, shell=True)

请注意,我将变量名称更改为更具 Python 风格,它们没有错,但总有改进的空间:)。

您自己的解决方案的问题是您需要在命令行上的单个/parameter参数之后将参数传递给脚本。 例如:

winscp.com /script=commands.txt /parameter one two three

这将在commands.txt启动脚本并将onetwothree传递给脚本,在那里它们可以作为%1%等访问(请注意,WinSCP 建议您在脚本中用引号将它们括起来,如果它们可以包含空格)

在您的尝试中,您传递 1.) 仅参数,2.) '/parameter param'作为单个字符串,而不是.run()和 3.) 预期的两个字符串。) '/parameter //param'具有同样的问题,但增加了一个多余的双斜线。

在你写的形式中,这应该是正确的:

subprocess.run(["C:\Program Files (x86)\WinSCP\WinSCP.com", "/script=" + cmdFile, "/log=" + logfile, "/parameter", param], shell=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM