file
我有一个 bash 脚本调用一个 python 脚本,我想通过 stdin提供内容。调用 bash 脚本如下:
./script.sh < file
以及内容script.sh
:
#! /usr/bin/env bash
pushd /some/python/virtual/environment/working/dir
source venv/bin/activate
python main.py ??????
deactivate
popd
我不知道要填写什么才能将给定??????
的内容传递file
给 bash 脚本作为标准输入到 python 脚本main.py
。
请注意,这file
可能是一个大文本文件,并且使用 bash 的read
是不是理想的。
调用 bash 脚本时需要使用 stdin。我可以灵活地将任何内容传递给main.py
.
有什么想法可以解决这个难题吗?
添加
@cas 的回答让我清楚地知道,我还需要解释我尝试在哪种上下文中使用script.sh
.
我想script.sh
用作转发中的脚本~/.forward
,内容为:
|/path/to/script.sh
哪个后缀调用为/path/to/script.sh
;日志对此很清楚。使用简化版本的 python 脚本进行简单测试,例如:
|/path/to/simple/main.py
证明 postfix 确实调用main.py
标准输入上的邮件内容。但这种组合似乎不起作用。
答案1
假设你的main.py
脚本正确写入从 stdin 读取和venv/bin/activate
从 stdin(*) 读取的任何内容都??????
应该是“什么都没有”。
bash 脚本中没有之前的命令会在 python 之前使用 stdin,因此 python 将开始使用它。
#/bin/bash
pushd /some/python/virtual/environment/working/dir
source venv/bin/activate
python main.py
deactivate
或者制作main.py
可执行文件并直接运行它./main.py
...无论哪种方式,工作原理都是相同的。
(*) 如果有的话,你可能根本无法做到这一点,除非有一些丑陋的东西,比如将所有 stdin 捕获到变量,然后将<<<
变量通过管道或重定向到 firstvenv/bin/activate
和 then main.py
。
对于这里发生的情况以及其工作原理的一个非常明显的示例,请考虑以下 sh 脚本kitten.sh
:
#!/bin/sh
cat
它只是运行cat
,开始从标准输入读取并将其输入打印到标准输出。