将STDIN传递给一个脚本,该脚本本身是通过管道传输到Python解释器的?

kos*_*tmo 7 python svn bash pipe pre-commit-hook

我需要实现一个SVN预提交钩子,它执行一个本身存储在SVN中的脚本.

我可以使用该svn cat命令将该脚本传递给Python解释器,如下所示:

svn cat file://$REPO/trunk/my_script.py | python - --argument1 --argument2
Run Code Online (Sandbox Code Playgroud)

但是,my_script.py它本身需要在STDIN上传输数据.

该数据不存储在文件中; 它存储在网络上.我宁愿不必将数据下载到临时文件,因为通常我可以将它传递给Python程序:

curl http://example.com/huge_file.txt | python my_script.py
Run Code Online (Sandbox Code Playgroud)

我不确定如何将这两种管道结合起来.

kos*_*tmo 10

我想出了如何在不创建任何临时文件的情况下执行此操作,但不严格使用"管道".

curl http://example.com/huge_file.txt | python <(svn cat file://$REPO/trunk/my_script.py) --argument1 --argument2

我在Bash中使用了"匿名文件描述符"构造,它可以用来代替任何文件路径.

例如 python my_script.py ,相当于 python <(cat my_script.py)