我们有一个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
我们做错了什么? 感谢
答案 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)