【问题标题】:Run python, with a parameter, on a cURL command on one line在一行的 cURL 命令上运行带有参数的 python
【发布时间】:2018-06-03 07:05:39
【问题描述】:

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

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
$ python ./awslogs-agent-setup.py --region eu-west-2

我该怎么做?

我尝试了以下

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s | python --region eu-west-2

但我得到了错误:

Unknown option: --

【问题讨论】:

  • 您在 python 之后忘记了 ./awslogs-agent-setup.py,但这还不是全部,看起来 ./awslogs-agent-setup.py 期望读取文件系统上的特定文件 - 所以您必须更新它以便它可以读取 curl 的直接作为参数输出
  • @Arount awslogs-agent-setup.py是正在下载的文件,他想直接从curl的输出中执行,而不是放到本地文件中执行。

标签: python bash curl


【解决方案1】:

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

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s |\
     python /dev/stdin --region eu-west-2

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

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -s |\
     python - --region eu-west-2

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

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

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

【讨论】:

  • 您可以使用- 作为文件名。 Python 遵循将- 视为文件名来表示标准输入的标准约定,那么您就不会依赖于特定于操作系统的/dev/stdin
【解决方案2】:

为什么不直接使用&amp;&amp;

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O && python ./awslogs-agent-setup.py --region eu-west-2

如果您不想创建文件只是为了稍后删除,请执行以下操作:

curl -s https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py | python /dev/stdin --region eu-west-2

Execute bash script from URL

【讨论】:

  • 我不想创建一个不需要的文件只是为了删除它
  • 您的第二个解决方案似乎与@Inian 答案相同,只是它更详细并且有更多选项
猜你喜欢
  • 1970-01-01
  • 2020-09-08
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多