Python诅咒不适用于命令替换
我正在使用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 此外,如果您想将
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)