我需要实现一个SVN预提交钩子,它执行一个本身存储在SVN中的脚本。
我可以使用svn cat
命令将该脚本传递给Python解释器,如下所示:
svn cat file://$REPO/trunk/my_script.py | python - --argument1 --argument2
但是,my_script.py
本身要求在STDIN上传输数据。
该数据未存储在文件中;它存储在网络上。我宁愿不必将数据下载到临时文件,因为通常我可以将它传递给Python程序:
curl http://example.com/huge_file.txt | python my_script.py
我不确定如何组合这两种管道。
答案 0 :(得分:10)
我想出了如何在不创建任何临时文件的情况下执行此操作,但不严格使用“管道”。
curl http://example.com/huge_file.txt | python <(svn cat file://$REPO/trunk/my_script.py) --argument1 --argument2
我在Bash中使用了“匿名文件描述符”构造,可用于代替任何文件路径。
E.g。
python my_script.py
相当于
python <(cat my_script.py)
答案 1 :(得分:0)
我不认为这是可能的。您将脚本作为标准输入提供给python解释器。这意味着python解释器已经附加到输入流。我不认为脚本内容可以创建第二个标准输入来读取。