2013-07-24 10 views
5

Ho problemi correttamente sfuggire una chiamata sottoprocessomodo corretto per sfuggire a una chiamata sottoprocesso in python

voglio chiamare sed -n "$=" /path/to/file per contare il numero di righe di un file, ma non riescono a farlo in pitone. Il mio codice è il seguente:

import subprocess 

filename = "/path/to/file" 

cmd = subprocess.Popen(["sed", "-n '$='", filename], stdout=subprocess.PIPE) 
cmd_out, cmd_err = cmd.communicate() 
num_lines = int(cmd_out.strip()) 

print num_lines 

Ho provato diverse combinazioni in fuga per "-n '$ ='", ma nulla sembra funzionare.

risposta

4

-n e $= sono due argomenti separati.

["sed", "-n", "$=", filename] 
+0

Grazie, ho pensato che gli argomenti vengono passati in una singola stringa non come una lista. – markz

1

Per impostazione predefinita, subprocess.Popen ha shell = False.

Senza invocare la shell, ogni argomento viene passato non interpretato da sed Così sed legge argomenti -n '$ ='

Quando si esegue il comando sed -n '$ =', shell rimuove il '' prima di inviare al comando sed.

Così il vostro $ = dovrebbe essere senza virgolette

E come specificato da Ignacio, -n $ = argomenti dovrebbe essere separata

cmd = subprocess.Popen(["sed", "-n", "$=", filename], stdout=subprocess.PIPE) 
Problemi correlati