0

我很难理解为什么这会失败并出现wget: missing URL错误:

import shlex
import subprocess

copy_command = "wget -O - 'http://example.com/somepath/somefile.txt?someparam=test' | sshpass -p pass ssh user@localhost -p 2222 \"cat - > /upload/somefile.txt\""

cmd = shlex.split(copy_command, posix=False)

with subprocess.Popen(
    cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True
) as proc:
    output, error = proc.communicate()

我在这里想念什么?如果我只是直接给 subprocesscopy_command字符串,那么它可以正常工作。

4

1 回答 1

1

要设置管道,需要父进程生成所有涉及的程序,并将一个的 stdio 连接(管道)到另一个。

subprocess的 Python 文档解释了如何执行此操作。

它与字符串参数一起工作,shell=True因为它只是将命令行交给子 shell,而该 shell 处理所有这些细节。

于 2021-03-12T08:12:50.527 回答