Ls insan tüketimi için tasarlanmıştır ve çıktısını ayrıştırmamalısınız .
Kabuk komut dosyalarında, ls çıktısının ayrıştırılmasının işe yaradığı birkaç durum vardır, istenen efekti elde etmenin en basit yoludur. Ls, ASCII olmayan ve dosya adlarındaki karakterleri kontrol edebileceğinden, bu durumlar bir dosya adı almayı gerektirmeyenlerin bir alt kümesidir ls
.
Python'da, çağırmak için kesinlikle hiçbir neden yoktur ls
. Python'un tüm ls
işlevleri yerleşiktir. Kullan os.listdir
bir dizinin içeriğini listelemek için ve os.stat
ya os
dosya meta elde etmek. os
Modüllerdeki diğer işlevlerin de probleminizle ilgili olması muhtemeldir.
Uzak dosyalara ssh üzerinden erişiyorsanız, dosya adlarını listelemenin oldukça sağlam bir yolu sftp'dir:
echo ls -1 | sftp remote-site:dir
Bu, her satıra bir dosya adı yazdırır ve ls
yardımcı programın aksine sftp
yazdırılamayan karakterleri değiştirmez. Bir dosya adının yeni satır içerdiği dizinleri güvenilir bir şekilde listeleyemezsiniz, ancak bu nadiren yapılır (bunu bir kullanılabilirlik sorunu değil, potansiyel bir güvenlik sorunu olarak unutmayın).
Python'da (kabuk metakarakterlerinin kaçması gerektiğine dikkat edin remote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
Daha karmaşık etkileşimler için, belgelerde sftp'nin toplu moduna bakın.
Bazı sistemlerde (Linux, Mac OS X, belki de bazı birleşimler, ancak kesinlikle Windows değil), farklı bir yaklaşım, sshfs ile ssh aracılığıyla uzak bir dosya sistemini bağlamak ve daha sonra yerel olarak çalışmaktır.