我想编写一个小的bash函数,以便我可以告诉bash,import os
否则from sys import stdout
它将生成一个新的Python解释器,其中包含导入的模块。
后一个from
函数如下所示:
from () {
echo "from $@" | xxd
python3 -i -c "from $@"
}
如果我这样称呼:
$ from sys import stdout
00000000: 6672 6f6d 2073 7973 2069 6d70 6f72 7420 from sys import
00000010: 7374 646f 7574 0a stdout.
File "<string>", line 1
from sys
^
SyntaxError: invalid syntax
>>>
的字节from sys
是
66 72 6f 6d 20 73 79 73 20
f r o m s y s
那里没有EOF,但是Python解释器的行为就像是在读取EOF。在流的末尾有一个换行符,这是可以预期的。
from
的姐姐导入了一个完整的Python模块,看起来像这样,它通过清理和处理字符串以及对不存在的模块进行故障处理来解决该问题。
import () {
ARGS=$@
ARGS=$(python3 -c "import re;print(', '.join(re.findall(r'([\w]+)[\s|,]*', '$ARGS')))")
echo -ne '\0x04' | python3 -i
python3 -c "import $ARGS" &> /dev/null
if [ $? != 0 ]; then
echo "sorry, junk module in list"
else
echo "imported $ARGS"
python3 -i -c "import $ARGS"
fi
}
这就解决了流中无法解释的EOF的问题,但是我想理解为什么Python认为存在EOF。