【问题标题】:Add a delay while curl is downloading python script and then pipe to execute script?在 curl 下载 python 脚本然后通过管道执行脚本时添加延迟?
【发布时间】:2016-08-24 16:59:31
【问题描述】:

我刚刚制作了一个 rickroll 恶作剧来与朋友和家人玩。我希望能够使用有效的 curl 命令从 github 下载文件。我的问题是,当我使用管道并尝试执行脚本时,它会在 curl 执行后和下载文件之前立即执行。

这是我要运行的命令:

curl -L -O https://raw.githubusercontent.com/krish-penumarty/RickRollPrank/master/rickroll.py | python rickroll.py

我也尝试使用 sleep 命令运行它,但没有任何运气。

(curl -L -O https://raw.githubusercontent.com/krish-penumarty/RickRollPrank/master/rickroll.py; sleep 10) | python rickroll.py

【问题讨论】:

  • 这不是管道| 的用途。你想要&&,可能阅读shell 语言手册是个好主意。 (您还想教育您的朋友和家人不要运行他们不理解的命令
  • 我明白了。谢谢你,我会试试的。我一定会在运行任何命令之前教育他们。
  • @spectras 嘿,如果您发布答案,我可以将其标记为已接受的答案!有效。感谢您的帮助

标签: python linux curl pipe


【解决方案1】:

扩展我的评论。

有几种方法可以使用大多数 shell 语言来链接命令(这里我假设 sh / bash 方言)。

  • 最基本的:; 将按顺序运行每个命令,在前一个命令完成时开始下一个命令。
  • 条件链,&&; 一样工作,但一旦命令返回错误(任何非 0 return code),链就会中止。
  • 条件链,||&& 一样工作,但在命令成功后立即中止链(返回 0)。

你在这里尝试做的不是那些,而是piping。由| 触发,它会导致其两侧的命令立即运行,左侧的标准输出被馈送到右侧的标准输入。

您的第二个示例也不起作用,因为它会导致两个序列并行运行:

  • 第一个序列是curl,然后是sleep,一旦完成。
  • 第二个序列是python 命令,与第一个序列写入的任何内容同时运行,并将其重定向为输入。

所以修复它:command1 && command2,将运行 curl,等待它完成,并且仅在 curl 成功时运行 python

再一次,你可以用你的例子来说明运行一个不完全理解的命令是多么有害。让你的脚本用红色写下“你的所有文件都已被删除”,这有助于在该主题上对人们进行教育。

【讨论】:

  • 感谢您的详细解答!这些命令现在很有意义。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 2018-04-03
  • 2021-02-17
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多