Problema com "\" no Python

253 views
Skip to first unread message

joao norberto destro

unread,
May 4, 2019, 10:49:10 AM5/4/19
to qgisbrasil
Senhores Bom Dia,

Talvez esteja fugindo do escopo do grupo, porem caso alguém possa ajudar, aqui vai. 

Estou desenvolvendo um plugin que chama um programa externo. Como para cada usuário e maquina este endereço será diferente. Eu solicitarei que o endereço do programa na maquina
do novo usuário seja inserido em um arquivo txt e leio este arquivo, com o conteúdo, por exemplo:. 

"C:\Program Files (x86)\SAGA-GIS\saga_gui.exe"

Porem quando executo o plugin com o comando para carregar este programa, vide código:

ref_arquivo = open("c:/mais_valia/saga.txt","r")
linha1 = ref_arquivo.read()
os.startfile(linha1)

O QGIS me devolve este erro:

Traceback (most recent call last):

File "C:/Users/JOAO/.qgis2/python/plugins\BB_Class\BB_Module_Name.py", line 214, in run 

os.startfile(linha1)

WindowsError: [Error 2] O sistema n�o pode encontrar o arquivo especificado: '"C:\\Program Files (x86)\\SAGA-GIS\\saga_gui.exe"\n'


Em algum momento ele esta inserindo uma barra a mais. Haveria uma forma para contornar isso?

P.S. Quando insiro o comando inteiro, dai funciona.

os.startfile("C:\Program Files (x86)\SAGA-GIS\saga_gui.exe")

Muito Obrigado.

Hebert Azevedo Consultor Geo

unread,
May 5, 2019, 9:33:57 PM5/5/19
to qgisb...@googlegroups.com
Boa noite João,

Perceba que na mensagem de erro há um \n no caminho, que é o comando python quando há mudança de linha. Se você está tratando o caminho como uma string te recomendo inserir uma função de replace, substituindo o '\n', por '', para evitar estes problemas.

Att

Hebert Guilherme de Azevedo - Consultor em Geotecnologias

Veja nossos cursos na plataforma Udemy: https://www.udemy.com/user/hebert-azevedo-2/
Inscreva-se e acompanhe nosso blog: http://bit.ly/2CL63UZ
Inscreva-se e acompanhe nosso canal Youtube: http://bit.ly/2J0H2Wa
Curta e acompanhe nossa página no Facebook: http://bit.ly/2yGErMp
Acompanhe nosso twitter: https://twitter.com/consultorgeo


--
Comunidade QGIS Brasil: http://qgisbrasil.org/
---
Você recebeu essa mensagem porque está inscrito no grupo "qgisbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisbrasil+...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para qgisb...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/qgisbrasil.
Para mais opções, acesse https://groups.google.com/d/optout.


--

joao norberto destro

unread,
May 6, 2019, 7:50:41 AM5/6/19
to qgisbrasil
Caro Hebert, Bom Dia, 
Obrigado pela resposta, porem infelizmente não funcionou.
Quando eu faço o que você sugere ocorre outro tipo de erro, vide abaixo.
Usei o comendo replace conforme sugerido.

ref_arquivo = open("c:\mais_valia\saga.txt","r")
caminho_programa = ref_arquivo.read()
novo_caminho=caminho_programa.replace('\n','')
#---------------------------------Chamada do programa externo
os.startfile(novo_caminho)
#os.startfile("C:\Program Files (x86)\SAGA-GIS\saga_gui.exe")

Acarretou este novo erro:

Traceback (most recent call last):

File "C:/Users/JOAO/.qgis2/python/plugins\BB_Class\BB_Module_Name.py", line 212, in run

os.startfile(novo_caminho)

WindowsError: [Error 2] O sistema n�o pode encontrar o arquivo especificado: '\xef\xbb\xbf"C:\\Program Files (x86)\\SAGA-GIS\\saga_gui.exe"'

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisb...@googlegroups.com.

Para postar nesse grupo, envie um e-mail para qgisb...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/qgisbrasil.
Para mais opções, acesse https://groups.google.com/d/optout.


--

Hebert Azevedo Consultor Geo

unread,
May 6, 2019, 9:23:08 AM5/6/19
to qgisb...@googlegroups.com
João,

que estranho ele ter inserido estes caracteres  '\xef\xbb\xbf depois desta alteração. Já avaliou usar o comando os.path.join?

att

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisbrasil+...@googlegroups.com.

Para postar nesse grupo, envie um e-mail para qgisb...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/qgisbrasil.
Para mais opções, acesse https://groups.google.com/d/optout.


--

Kyle Felipe

unread,
May 6, 2019, 11:51:19 AM5/6/19
to qgisbrasil
O problema é que o caractere "\" é um meta-caractere no python que significa escape... isso indica que, o próximo caractere seguido da "\" na verdade é um comando a ser realizado (falando bem generalizadamente)
exemplo:
"\n" > significa que o n deve ser interpretado como uma quebra de linha.. e não como o n literal.

Sendo assim, para entender que a \ é literal, deve-se usar ela dobrada, ou seja "\\" assim o sistema vai ver que tem de "escapar" a barra e entender ela literalmente....

Lembre-se que ao desenvolver algum aplicativo/plugin/script tem de se considerar que será rodado em sistemas operacionais diferentes, por exemplo, no linux o separador de pastas utilizado é o "/".
E o Python tem formas de tratar isso.

joao norberto destro

unread,
May 6, 2019, 6:13:44 PM5/6/19
to qgisb...@googlegroups.com
Hebert, boa noite,
Inseri as barras dupla "\\" confirme indicado, porem o resultado não foi satisfatório.
Gerou este erro:

Traceback (most recent call last):

File "C:/Users/JOAO/.qgis2/python/plugins\BB_Class\BB_Module_Name.py", line 218, in run os.startfile(caminho)

WindowsError: [Error 2] O sistema n�o pode encontrar o arquivo especificado: '\xef\xbb\xbf"c:\\\\Program Files (x86)\\\\SAGA-GIS\\\\saga_gui.exe"'


Vou tentar outra abordagem. Obrigado pelas dicas.


João Norberto Destro, M.Sc.
Eng. Cartógrafo - UFPR
JND-GEO Tecnologia Ltda-ME
(41) 3053-6580  (41) 9 9979-8493 (TIM)


Kyle Felipe

unread,
May 6, 2019, 7:21:37 PM5/6/19
to qgisbrasil
É possível compartilhar o código para a gente??
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisb...@googlegroups.com.

Kyle Felipe

unread,
May 6, 2019, 11:19:20 PM5/6/19
to qgisbrasil
Agora que consegui ler com mais atençao, vi que falei besteira...
O @Herbert deu a pista para solucionar.. mas o modo correto, seria usando o strip() (clique aqui para saber sobre o método stiop())
Pois ele vai eliminar a quebra de parágrafo ('\n') e caracteres como espaço e talz...
fica a pergunta, é necessário colocar o endereço do saga dentro de um arquivo TXT para rodar??
Dependendo da utilização, pode colocar no próprio codigo, ou rodar algum algoritimo do saga usando o call do subprocess??
Olha esse exemplo que criei um tempo atraz...

Em sábado, 4 de maio de 2019 11:49:10 UTC-3, joao norberto destro escreveu:

joao norberto destro

unread,
May 7, 2019, 4:50:03 PM5/7/19
to qgisb...@googlegroups.com
Senhores, boa tarde,
Infelizmente todas as alternativas apresentadas eu não consegui implementar.
Eu fiz todos os tratamentos possíveis com a string porem quando executo o comando da o erro. 
Quanto a disponibilizar o código eu estou começando agora o uso do QGIS e na programação Python
e se trata de um programa bem simples.
Eu ja gastei muito tempo de você, agradeço a ajuda, vou tentar uma nova alternativa e em outro momento
com mais tempo vou retornar a este desafio e quando resolver eu disponibilizo com toda certeza.
Mais uma vez muito obrigado Hebert e Kyle e vamos em frente.

João Norberto Destro, M.Sc.
Eng. Cartógrafo - UFPR
JND-GEO Tecnologia Ltda-ME
(41) 3053-6580  (41) 9 9979-8493 (TIM)

--
Comunidade QGIS Brasil: http://qgisbrasil.org/
---
Você recebeu essa mensagem porque está inscrito no grupo "qgisbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisbrasil+...@googlegroups.com.

Para postar nesse grupo, envie um e-mail para qgisb...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/qgisbrasil.

joao norberto destro

unread,
May 7, 2019, 5:15:50 PM5/7/19
to qgisb...@googlegroups.com
Senhores, 
Estou com dificuldade de controlar minha caixa de mensagem por conta da dinamica do grupo.
Agradecido pela participação e ajuda de todos, estou me descadastrando.
Att.

João Norberto Destro, M.Sc.
Eng. Cartógrafo - UFPR
JND-GEO Tecnologia Ltda-ME
(41) 3053-6580  (41) 9 9979-8493 (TIM)

Reply all
Reply to author
Forward
0 new messages