[Python] lanciare programma senza far comparire la shell

Daniele Varrazzo piro a develer.com
Ven 9 Nov 2012 17:40:23 CET


On 2012-11-09 16:29, Matteo Perini wrote:

>> Se sì, allora il problema è nello script. Il desktop launcher esegue 
>> una shell? Ovvero:
>>
>>     python -c "print 'prova'" > /tmp/prova1
>
> Questo non viene fatto...
> Ho configurato il lanciatore come nell'allegato.
> Non capisco cosa sbaglio... sembra che il comando "python" non sia 
> riconosciuto.
> Se scrivo in un terminale lo stesso commando viene eseguito senza
> problemi e in /tmp trovo il file prova1 con all'interno scritto
> "prova".

Immaginavo potesse non funzionare, per questo chiedevo. Non funziona 
perché il lanciatore non esegue una shell (che interpreta ">" ecc.) 
Questo è comprensibile.


>>     /bin/bash -c "python /il/tuo/script > /tmp/prova1 2>&1"
>>
>> Tutto non testato.
>>
> Questo ultimo comando mi da qualche speranza... viene creato il file
> /tmp/prova1 con scritto questo:
>
> Traceback (most recent call last):
>   File "prova.py", line 3079, in <module>
>     win = Main()
>   File "prova.py", line 49, in __init__
>     builder.add_from_file('main.glade')
> glib.GError: Apertura del file "main.glade" non riuscita: File o
> directory non esistente
>
> devo assegnare una working directory???

Solo se non ti va bene / o $HOME o ovunque sia quella di partenza.


> il file main.glade è nella stessa cartella del file prova.py

Guarda, mentre scrivevo il messaggio di sopra avevo in mente "scommetto 
che ha scritto un programma che fa assunzioni su quale sia la directory 
corrente"...

Se proprio devi, usa os.chdir(os.path.dirname(__file__)) per fare un cd 
là. Ma è una pratica sbagliata, stai giocando con una variabile globale. 
È meglio rendere il programma indipendente dalla directory, per esempio 
usa

     builder.add_from_file(os.path.join(os.path.dirname(__file__), 
'main.glade'))

sempre, rigorosamente, non testato.


-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python