在一行的 cURL 命令上运行带有参数的 python

Yah*_*din 4 python bash curl

我想在一行中运行以下命令:

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
$ python ./awslogs-agent-setup.py --region eu-west-2
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我尝试了以下

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s | python --region eu-west-2
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

Unknown option: --
Run Code Online (Sandbox Code Playgroud)

Ini*_*ian 5

您可以让python解释器从stdinusing /dev/stdin(类似于python -)中读取并同时传递附加参数。

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s |\
     python /dev/stdin --region eu-west-2
Run Code Online (Sandbox Code Playgroud)

正如Barmar指出的那样,使用/dev/stdin可能是操作系统特定的,在这种情况下使用python -会更标准

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s |\
     python - --region eu-west-2
Run Code Online (Sandbox Code Playgroud)

curl将文件内容输出到 stdout 时,您可以将其通过管道传输到解释器的标准输入。

或者在bash( <()) 中使用进程替换功能,它可以让您将命令的输出视为要读取的文件

python <(curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s) --region eu-west-2
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 `-` 作为文件名。Python 遵循将 `-` 作为文件名来表示标准输入的标准约定,那么你就不会依赖于特定于操作系统的 `/dev/stdin`。 (3认同)