Tôi muốn viết một hàm bash nhỏ để tôi có thể nói bash, import oshoặc from sys import stdoutnó sẽ sinh ra một trình thông dịch Python mới với mô-đun được nhập.
Hàm sau fromtrông như thế này:
from () {
echo "from $@" | xxd
python3 -i -c "from $@"
}
Nếu tôi gọi đây là:
$ 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
>>>
Các byte trong from syslà
66 72 6f 6d 20 73 79 73 20
f r o m s y s
Không có EOF trong đó, nhưng trình thông dịch Python đang hành xử như thể nó đọc EOF. Có một dòng mới ở cuối luồng, đó là dự kiến.
fromChị gái, nhập khẩu toàn bộ mô-đun Python, trông giống như thế này và giải quyết vấn đề bằng cách vệ sinh và xử lý chuỗi và không thành công trên các mô-đun không tồn tại.
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
}
Điều đó giải quyết vấn đề về EOF không giải thích được trong luồng, nhưng tôi muốn hiểu tại sao Python nghĩ rằng có EOF.
