【发布时间】:2021-05-22 11:46:38
【问题描述】:
我编写了一个 python 3 脚本来测试 API。
API 只能通过服务器访问,因此我有一个 bash 脚本,可以通过 ssh 在该服务器上执行 wget 并将结果移动到我的本地计算机进行分析。该脚本单独运行良好。
现在我想从 python 调用这个 bash 脚本几次,但是当我使用 subprocess.call() 时,bash 脚本中的 ssh 命令似乎中断了。
此行应将 API 响应保存到我服务器上的选定位置,以便稍后将其复制到我的计算机:
ssh USER@SERVER.com "wget 'https://API.com/?${options}' -O '${file_path}'"
但是我得到了错误bash: -O: command not found 并且响应被保存到wget 生成的默认文件中:
*Using options: 'filter[id]=1234'
*Sending request to API
bash: -O: command not found
--2021-02-19 12:02:52-- https://API.com/?filter[id]=1234
...
Saving to: ‘index.html?filter[id]=1234’
0K .......... .......... ........ 100% 9.48M=0.003s
2021-02-19 12:02:52 (9.48 MB/s) - ‘index.html?filter[id]=1234.’ saved [29477/29477]
所以在我看来,通过 ssh 执行的命令以某种方式被拆分为多个命令?
奇怪的是,当我使用os.system() 执行脚本(或直接从终端调用)时,它可以完美运行。下面是调用 bash 脚本的 python 代码:
# Failing subprocess.call line
subprocess.call(["./get_api.sh", save_file_name, f"'filter[id]={id}'"])
# Succeeding os.system line
system(f"./get_api.sh {save_file_name} 'filter[id]={id}'")
我想知道是否有人可以告诉我这里可能发生了什么?
(我对包含的代码进行了相当多的编辑以删除敏感信息,这也是我的第一个堆栈溢出问题,所以我希望它包含足够的信息/上下文)
【问题讨论】:
标签: python ssh subprocess wget