我有一个bash脚本调用python2.6来读取输入,但我遇到了一个错误。 下面是脚本。我正在从终端
运行bash脚本a=1
b=2
python2.6 <<"EOF"
a=int(input('Enter num 1'))
b=int(input('Enter num 2'))
ptint('a=%d ' % a)
print('b=%d ' % b)
EOF
c=$((a + b))
echo "$c"
Enter num 1Traceback (most recent call last):
File "<stdin>", line 1, in <module>
EOFError: EOF when reading a line
3
答案 0 :(得分:0)
Enter num 1Traceback (most recent call last):
您通过stdin
传递了脚本,并且还希望您的用户输入stdin
。 input
提出它,因为它什么都没有。在任何情况下,您都可以使用不同的构造(如进程替换)来“嵌入”该python代码。 E.g:
...
python2 <(cat <<"EOF"
a=int(input('Enter num 1'))
b=int(input('Enter num 2'))
print('a=%d ' % a)
print('b=%d ' % b)
EOF
)
...
这不会失败,但很可能没有做我认为你想做的事情。获取打印件并使用它们重新定义bash变量的值。
为此,如果$(...)
用于命令替换,则必须将整个python调用包装在另一对中。但是,这也会吞噬你的输入提示(使它们看不见并混淆掉外壳)。我不认为input
让你使用stderr
提示来解决这个问题。 (它还有另一个问题就是在输入上执行eval
,这可能会让你暴露在一系列其他问题中,并且在这种情况下可能不是你想要使用的函数。)
我不完全确定这个剧本的发展方向,但我希望这能让你继续学习。