Python诅咒不适用于命令替换

Python诅咒不适用于命令替换,python,shell,ncurses,curses,python-curses,Python,Shell,Ncurses,Curses,Python Curses,我正在使用python项目从列表中选择一个选项。下面的代码返回选项和索引 option, index = pick(options, title) Pick使用python中的curses库。我想将python脚本的输出传递给shell脚本 变量输出=$pythonfile.py 但它会被困在诅咒屏幕上。它不能画任何东西。原因是什么?要将Python脚本的输出传递给Bash变量,需要指定在变量声明中打开Python文件的命令 像这样: 变量_输出=$pythonfile.py 此外,如果您想将

我正在使用python项目从列表中选择一个选项。下面的代码返回选项和索引

option, index = pick(options, title)
Pick使用python中的curses库。我想将python脚本的输出传递给shell脚本

变量输出=$pythonfile.py


但它会被困在诅咒屏幕上。它不能画任何东西。原因是什么?

要将Python脚本的输出传递给Bash变量,需要指定在变量声明中打开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

pick会被卡住,因为当您使用$pythonfile.py时,shell会像重定向管道一样重定向pythonfile.py的输出。此外,pick的输出包含用于更新屏幕的字符,而不是您想要的字符。您可以通过以下方式解决这些问题:

将pythonfile.py的输出重定向到/dev/tty 确保pythonfile.py将其结果写入标准错误,以及 将shell脚本中的标准错误定向到$的输出。。。建筑 例如:

#!/bin/bash
foo=$(python basic.py 2>&1 >/dev/tty )
echo "result '$foo'"
在pythonfile.py中

而不是

print(option, index)

实际上pick使用ncurses如果启用multi\u select,它依赖于use\u default\u colors方法。我找到了一个解决方法,将current stdout存储到一个新流中,然后将此流传递给子流程。你这样做更好。
print(option, index)