2013-07-24 11 views
5

Mam problemy ucieczce prawidłowo połączenia subprocesspoprawny sposób uciec połączenia subprocess w python

chcę zadzwonić sed -n "$=" /path/to/file policzyć liczbę wierszy w pliku, ale nie robią z pytona. Mój kod jest następujący:

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 

Próbowałem różnych kombinacji ucieczkowych dla "-n" $ = "" ale nic nie działa.

Odpowiedz

4

-n i $= są dwoma oddzielnymi argumentami.

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

Dziękuję, myślałem, że argumenty są przekazywane w jednym ciągiem nie jako listę. – markz

1

Domyślnie podproces.Popen ma powłokę = False.

Bez wywołując powłokę, każdy argument jest przekazywany zinterpretowaną do sed Więc sed czyta argumenty jak -n „$ =”

Po uruchomieniu polecenia sed -n „$ =”, powłoki usuwa „” przed wysłaniem do komendy sed.

Więc $ = powinny być bez cudzysłowów

I jak określono przez Ignacio, -n $ = argumenty powinny być oddzielone

cmd = subprocess.Popen(["sed", "-n", "$=", filename], stdout=subprocess.PIPE) 
Powiązane problemy