Tôi muốn viết một hàm bash nhỏ để tôi có thể nói bash, import os
hoặc from sys import stdout
nó sẽ sinh ra một trình thông dịch Python mới với mô-đun được nhập.
Hàm sau from
trô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 sys
là
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.
from
Chị 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.