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 lsişlevleri yerleşiktir. Kullan os.listdirbir dizinin içeriğini listelemek için ve os.statya osdosya meta elde etmek. osModü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 lsyardımcı programın aksine sftpyazdı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.