Python sympy escape-символ и пакет sage (При установленном пакете sage, в выводе присутствует escape-символ)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
ormorph
Сообщения: 2600
ОС: Gentoo

Python sympy escape-символ и пакет sage

Сообщение ormorph »

Всем привет!
Обратил на одну неприятную вещь, вот простой пример кода:

Код: Выделить всё

from sympy import symbols
from sympy import latex
from sympy import integrate
from sympy import exp
x, a = symbols('x a')
print latex(integrate(x**3*exp(a*x),x))
from sympy import *
x, a = symbols('x a')
print latex(integrate(x**3*exp(a*x),x))


При выполнении команды: python file.py >file.py.out
в файле присутствует примерно следующее:

Код: Выделить всё

[?1034h\begin{bmatrix}- \frac{1}{2} y - \frac{1}{2} \sqrt{y^{2} - 4 z}, & - \frac{1}{2} y + \frac{1}{2} \sqrt{y^{2} - 4 z}\end{bmatrix}


Как видите в начале вывода присутствует escape-символ
выполнив : strace -o trace.txt python file.py
получил следующее
Spoiler

open("/usr/lib64/python2.7/site-packages/sage/libs/symmetrica/all.pyc", O_RDONLY) = -1 ENOENT (No such file or directory)
fstat(15, {st_mode=S_IFREG|0644, st_size=4895, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3028d7d000
read(15, "#from symmetrica import *\n\nfrom "..., 4096) = 4096
read(15, " as t_POLYNOM_MONOMIAL\n\nfrom sym"..., 4096) = 799
read(15, "", 4096) = 0
unlink("/usr/lib64/python2.7/site-packages/sage/libs/symmetrica/all.pyc") = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.7/site-packages/sage/libs/symmetrica/all.pyc", O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0100644) = -1 EACCES (Permission denied)
stat("/usr/lib64/python2.7/site-packages/sage/libs/symmetrica/symmetrica", 0x7fff23959520) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.7/site-packages/sage/libs/symmetrica/symmetrica.so", O_RDONLY) = 16
fstat(16, {st_mode=S_IFREG|0755, st_size=240168, ...}) = 0
open("/usr/lib64/python2.7/site-packages/sage/libs/symmetrica/symmetrica.so", O_RDONLY) = 17
read(17, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000}\0\0\0\0\0\0"..., 832) = 832
fstat(17, {st_mode=S_IFREG|0755, st_size=240168, ...}) = 0
mmap(NULL, 2337136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 17, 0) = 0x7f300cf0a000
mprotect(0x7f300cf3c000, 2093056, PROT_NONE) = 0
mmap(0x7f300d13b000, 40960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 17, 0x31000) = 0x7f300d13b000
close(17) = 0
open("/etc/ld.so.cache", O_RDONLY) = 17
fstat(17, {st_mode=S_IFREG|0644, st_size=253136, ...}) = 0
mmap(NULL, 253136, PROT_READ, MAP_PRIVATE, 17, 0) = 0x7f3028cbe000
close(17) = 0
open("/usr/lib64/libsymmetrica-2.0.so", O_RDONLY) = 17
read(17, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\357\3\0\0\0\0\0"..., 832) = 832
fstat(17, {st_mode=S_IFREG|0755, st_size=11825792, ...}) = 0
mmap(NULL, 13924280, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 17, 0) = 0x7f300c1c2000
mprotect(0x7f300cd03000, 2097152, PROT_NONE) = 0
mmap(0x7f300cf03000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 17, 0xb41000) = 0x7f300cf03000
mmap(0x7f300cf09000, 1976, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f300cf09000
close(17) = 0
mprotect(0x7f300cf03000, 4096, PROT_READ) = 0
mprotect(0x7f300d13b000, 4096, PROT_READ) = 0
munmap(0x7f3028cbe000, 253136) = 0
close(16) = 0
times({tms_utime=70, tms_stime=29, tms_cutime=0, tms_cstime=0}) = 4297297769
write(1, "\33[?1034h", 8) = 8
close(15) = 0


из вывода так понял что виной выступает пакет sage сборка под gentoo из Layman sage-on-gentoo overlay
удалив emerge -C sage данный символ больше не появлялся.

Собственно хотел узнать, почему так получается, и можно ли это как то вылечить. А то боюсь что придется писать свой ебилд, для сборки sage в отдельном каталоге, сейчас пока времени нет на это.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2600
ОС: Gentoo

Re: Python sympy escape-символ и пакет sage

Сообщение ormorph »

Пока решил проблему тем что прописал в /home/user в файле .bash_profile
строчку : export TERM=linux
Другими словами заменил переменную TERM=xterm на TERM=linux

пример вывода:
команда:

Код: Выделить всё

# TERM=xterm python -c 'import sympy' |xxd

вывод:

Код: Выделить всё

0000000: 1b5b 3f31 3033 3468                      .[?1034h

команда:

Код: Выделить всё

TERM=linux python -c 'import sympy' |xxd

вывод отсутствует.

Только на сколько правильно решил проблему я не знаю.
Спасибо сказали:
Ответить