我想将 stdin 传递给 bash 脚本,再传递给该 bash 脚本中调用的 python 脚本

我想将 stdin 传递给 bash 脚本,再传递给该 bash 脚本中调用的 python 脚本

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,开始从标准输入读取并将其输入打印到标准输出。

相关内容