如何将输出从linux命令管道传输到python脚本?

时间:2014-08-07 05:49:58

标签: python linux bash shell

我们有一个python脚本,接受以下参数作为示例:

mypie.py --size=20 --pielist='{"apple":[5],"orange":[7]}' --quantity=10

我们尝试使用test.sh bash shell脚本:

test.sh 20 5 7 10

test.sh

export SIZE=$1
export APPLE=$2
export ORANGE=$3
export QUANTITY=$4

echo "--size=$SIZE" --pipelist='{\"apple\":[$2],\"orange\":[$3]}\"' --quantity=$4" | tee output.txt
cat output.txt | sudo python mypie.py

我们收到了错误 错误:未指定大小。

但是当我们cat output.txt时,我们可以看到它的大小值。

--size=20 --pielist='{"apple":[5],"orange":[7]}' --quantity=10

我们做错了什么? 感谢

4 个答案:

答案 0 :(得分:3)

这样做 -

cat output.txt | sudo xargs python mypie.py

答案 1 :(得分:3)

使用管道将内容重定向到程序的标准输入 - 而不是命令行 您可以考虑构建一个args变量 - 然后将其传递给output.txt和您的python脚本 例如:

export SIZE=$1
export APPLE=$2
export ORANGE=$3
export QUANTITY=$4

export ARGS="--size=$SIZE" --pipelist='{\"apple\":[$2],\"orange\":[$3]}\"' --quantity=$4"

echo $ARGS | tee output.txt
sudo python mypie.py $ARGS

答案 2 :(得分:1)

简单明了的解决方案是更改test.sh,以便正确传递参数。

#!/bin/sh
set -x  # if you want to see the script's parameters
sudo python mypie.py --size="$1" \
            --pipelist="{'apple':[$2],'orange':[$3]}" --quantity="$4"

将参数作为标准输入传递(这是管道所做的)根本不是通常的方式,也不是特定适合这种特定交互类型的模型。

答案 3 :(得分:0)

您可以使用命令替换直接将命令输出作为python程序的参数。

python mypie.py `cat output.txt`

python mypie.py $(cat output.txt)