如何将Linux命令的输出传递给Python脚本?

0 投票
4 回答
1690 浏览
提问于 2025-04-18 16:20

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

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

我们在我们的test.sh这个bash脚本中尝试了:

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

结果出现了错误:
错误:没有指定大小。

但是当我们查看output.txt时,可以看到里面有大小的值。

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

我们哪里做错了呢?
谢谢!

4 个回答

1

你可以使用命令替换的方式,把命令的输出直接作为参数传给你的Python程序。

python mypie.py `cat output.txt`

或者

python mypie.py $(cat output.txt)
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

使用管道可以把内容传递给程序的标准输入,而不是直接在命令行上显示。
你可以考虑先创建一个叫做 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
3

这个命令可以这样理解 -

cat output.txt | sudo xargs python mypie.py

这里的意思是:首先用`cat output.txt`这个命令来查看`output.txt`文件里的内容,然后把这些内容通过管道(`|`)传递给后面的命令。接着,`sudo xargs python mypie.py`会把这些内容作为参数传给`mypie.py`这个Python程序去执行。`sudo`是用来提升权限的,确保你有足够的权限去运行这个程序。

撰写回答