Python curses不适用于命令替换

时间:2017-03-27 11:13:51

标签: python shell ncurses curses python-curses

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

option, index = pick(options, title)

Pick使用python中的curses库。我想将我的python脚本的输出传递给shell脚本。

variable output = $(pythonfile.py)

但它会卡在诅咒屏幕上。它无法画任何东西。这可能是什么原因?

2 个答案:

答案 0 :(得分:1)

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中执行

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