我使用python项目pick从列表中选择一个选项。下面的代码返回选项和索引。
option, index = pick(options, title)
Pick使用python中的curses库。我想将我的python脚本的输出传递给shell脚本。
variable output = $(pythonfile.py)
但它会卡在诅咒屏幕上。它无法画任何东西。这可能是什么原因?
答案 0 :(得分:1)
pick
被卡住,因为当您使用$(pythonfile.py)
时,shell会重定向pythonfile.py
的输出,就好像它是一个管道一样。此外,pick
的输出包含用于更新屏幕的字符(不是您想要的)。
pythonfile.py
的输出重定向到/dev/tty
pythonfile.py
将其结果写入标准错误,并$(...)
构造的输出。例如:
#!/bin/bash
foo=$(python basic.py 2>&1 >/dev/tty )
echo "result '$foo'"
并在pythonfile.py
中执行
import sys
print(option, index, file=sys.stderr)
而不是
print(option, index)
答案 1 :(得分:0)
要将Python脚本的输出传递给Bash变量,您需要指定用于在变量声明中打开python文件的命令。
像这样:
variable_output=$(python pythonfile.py)
此外,如果您想将变量从Python传递给bash,您可以使用Python的sys模块,然后重定向stderr。
像这样:
test.py
import sys
test_var = (str(3 + 3))
sys.exit(test_var)
test.sh
test_var=$(python3 test.py 2>&1)
echo $testvar
现在,如果我们运行test.sh
,我们会得到输出6
。