Biraz bash söyleyebileceğim küçük bir bash işlevi yazmak istedim, import os
ya da from sys import stdout
ithal edilen modülle yeni bir Python yorumlayıcısı oluşturacak.
İkinci from
işlev şöyle görünür:
from () {
echo "from $@" | xxd
python3 -i -c "from $@"
}
Bunu ararsam:
$ 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
>>>
İçinde bayt from sys
olan
66 72 6f 6d 20 73 79 73 20
f r o m s y s
Orada EOF yok, ancak Python yorumlayıcısı EOF okumuş gibi davranıyor. Akışın sonunda beklenen bir yeni satır var.
from
Python modülünün tamamını ithal eden kız kardeşi şöyle görünür ve ipi sterilize ederek ve işleyerek ve mevcut olmayan modüllerde başarısız olarak sorunu çözer.
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
}
Bu, akışta açıklanamayan bir EOF sorununu çözüyor, ancak Python'un neden bir EOF olduğunu düşündüğünü anlamak istiyorum.