ฉันต้องการเขียนฟังก์ชั่นทุบตีเล็ก ๆ น้อย ๆ เช่นที่ฉันสามารถบอก 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 ทั้งหมดมีลักษณะเช่นนี้และซึ่งแก้ปัญหาโดย sanitizing และประมวลผลสตริงและโดยความล้มเหลวในโมดูลที่ไม่มีอยู่
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