2015-05-03 21 views
12

Sto cercando di contare il numero di righe in un file utilizzando le funzioni Python. All'interno della directory corrente, mentre os.system("ls") trova il file, il comando subprocess.Popen(["wc -l filename"], stdout=subprocess.PIPE non funziona.Errore Python subprocess.Popen() (Nessun file o directory simile)

Ecco il mio codice:

>>>import os 
>>>import subprocess 
>>>os.system("ls") 
sorted_list.dat 
0 
>>>p=subprocess.Popen(["wc -l sorted_list.dat"],stdout=subprocess.PIPE) 
    File "<stdin>", line 1, in <module> 
    File "/Users/a200/anaconda/lib/python2.7/subprocess.py", line 710, in  __init__ 
errread, errwrite) 
    File "/Users/a200/anaconda/lib/python2.7/subprocess.py", line 1335, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 

risposta

20

si dovrebbe passare gli argomenti come una lista (consigliato):

subprocess.Popen(["wc", "-l", "sorted_list.dat"], stdout=subprocess.PIPE) 

In caso contrario, è necessario passare shell=True se si desidera utilizzare l'intera "wc -l sorted_list.dat" stringa come comando (non consigliato, può essere un pericolo per la sicurezza).

subprocess.Popen("wc -l sorted_list.dat", shell=True, stdout=subprocess.PIPE) 

Per saperne di più shell=True problemi di sicurezza here.

3

L'errore si verifica perché si sta tentando di eseguire un comando di nome wc -l sorted_list.dat, cioè, sta cercando di trovare un filechiamato come "/usr/bin/wc -l sorted dat".

dividere l'argomenti:

["wc", "-l", "sorted_list.dat"]