Ciao a tutti,

Sto studiando Python, (sono alle classi).

Vorrei cominciare a capire come interagire con il sistema. Per esempio, con uno script bash mi bastava scrivere il comando ad esempio

ffmpeg-ss 00:00:30-t 00:00:15-vcodec copy-acodec copia-i input.mp4 output.mp4

Capisco che Python non è la shell e quindi la cosa non può essere così diretta. Ma mi piacerebbe scoprire come usare le applicazioni/librerie di Ubuntu.

Qualche consiglio?

chiesto 09 Ott '13, 21:28

gisnio-sell's gravatar image

gisnio-sell
871425977

modificato 10 Ott '13, 11:57

enzotib's gravatar image

enzotib ♦♦
14.0k112186


Per lanciare un'applicazione esterna, nel caso più semplice puoi usare il metodo system dell'oggetto os:

#!/usr/bin/python

import os

os.system("ls -l")

vedi per esempio http://docs.python.org/2.7/library/os.html#os.system

In effetti è consigliato di rimpiazzare le chiamate a system con l'uso del modulo subprocess, di seguito qualche esempio: Replacing older functions with the subprocess module

coll. permanente

ha risposto 09 Ott '13, 21:58

enzotib's gravatar image

enzotib ♦♦
14.0k112186

modificato 09 Ott '13, 22:22

Ciao @enzotib,

Grazie, in teoria quindi fra parentesi posso mettere qualunque comando che userei da terminale?

(09 Ott '13, 22:00) gisnio-sell gisnio-sell's gravatar image

Sì, proprio così, il metodo system lancia una subshell in cui esegue la stringa come uno script di shell, ma l'interazione con il resto dello script python è limitata. Per esempio per gestire l'output del programma potresti guardare in alternativa il metodo popen.

(09 Ott '13, 22:02) enzotib ♦♦ enzotib's gravatar image

Mi stai dando preziose info.. Penso io debba guardare la documentazione per vedere tutti gli aspetti del metodo popen giusto? Ancora ci devo fare la mano.. L'interazione è limitata a causa dell'inviolabilità prorpia delle variabili interne di una classe in questo caso os? (ho ancora molto confusione in testa sono ancora in fase di apprendimento)

(09 Ott '13, 22:15) gisnio-sell gisnio-sell's gravatar image

@gisnio-sell: ho aggiunto qualche altra info alla risposta

(09 Ott '13, 22:21) enzotib ♦♦ enzotib's gravatar image

@enzotib .. penso ci metterò un po a leggere (e capire) tutto.. Metto la spunta di domanda risolta intanto comunque, mi hai dato indicazioni che vanno perfino oltre a quanto avevo chiesto... Grazie ancora! :)

(09 Ott '13, 22:32) gisnio-sell gisnio-sell's gravatar image

Ma i valori numerici che restituisce dopo ogni processo cosa rappresentano? Comunque con questo comando provando:

subprocess.call(["ls", "-l"]) 0

ls -l non mi stampa nulla, immagino perchè nessun comando apre e "mette in sleep" il terminale... però se ad esempio provo : subprocess.call(["smplayer"]) smplayer viene aperto

(09 Ott '13, 22:48) gisnio-sell gisnio-sell's gravatar image

@gisnio-sell: devi usare check_output invece di call, e il numero restituito è l'exit code del processo, 0 se tutto ok, oppure un codice diverso da zero per indicare una condizione di errore.

(09 Ott '13, 23:03) enzotib ♦♦ enzotib's gravatar image

ah ok ... infatti con il comando clear mi dava 256 ..in effetti non poteva che andare in errore

(09 Ott '13, 23:35) gisnio-sell gisnio-sell's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×1,598
×102
×27

domanda posta: 09 Ott '13, 21:28

domanda visualizzata: 2,443 volte

ultimo aggiornamento: 10 Ott '13, 11:57

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.