Ls jest przeznaczony do spożycia przez ludzi i nie powinieneś analizować jego wydajności .
W skryptach powłoki istnieje kilka przypadków, w których parsowanie danych wyjściowych ls działa, jest najprostszym sposobem na osiągnięcie pożądanego efektu. Ponieważ ls może modyfikować znaki inne niż ASCII i znaki sterujące w nazwach plików, te przypadki są podzbiorem tych, które nie wymagają uzyskania nazwy pliku ls
.
W Pythonie nie ma absolutnie żadnego powodu, aby się wywoływać ls
. Python ma wszystkie ls
wbudowane funkcje. Służy os.listdir
do wyświetlania zawartości katalogu i os.stat
lub os
do uzyskiwania metadanych plików. Inne funkcje w os
modułach mogą być również związane z twoim problemem.
Jeśli uzyskujesz dostęp do zdalnych plików przez ssh, dość dobrym sposobem wyświetlania nazw plików jest sftp:
echo ls -1 | sftp remote-site:dir
Spowoduje to wydrukowanie jednej nazwy pliku w wierszu i, w odróżnieniu od ls
narzędzia, sftp
nie zmienia znaków niedrukowalnych. Nadal nie będziesz w stanie rzetelnie wymienić katalogów, w których nazwa pliku zawiera nowy wiersz, ale jest to rzadko wykonywane (pamiętaj o tym jako o potencjalnym problemie bezpieczeństwa, a nie o użyteczności).
W pythonie (uwaga, że metaznaki powłoki muszą być znakami ucieczki remote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
W przypadku bardziej złożonych interakcji sprawdź tryb wsadowy sftp w dokumentacji.
W niektórych systemach (Linux, Mac OS X, być może w innych unikach, ale na pewno nie w Windows), innym podejściem jest zamontowanie zdalnego systemu plików za pomocą ssh z sshfs , a następnie praca lokalna.