Ls dirancang untuk konsumsi manusia, dan Anda tidak boleh menguraikan hasilnya .
Dalam skrip shell, ada beberapa kasus di mana parsing output ls berfungsi adalah cara paling sederhana untuk mencapai efek yang diinginkan. Karena ls dapat membuat non-ASCII dan mengontrol karakter dalam nama file, case-case ini adalah himpunan bagian dari mereka yang tidak memerlukan untuk mendapatkan nama file dari ls
.
Dalam python, sama sekali tidak ada alasan untuk memohon ls
. Python memiliki semua ls
fungsionalitas bawaan. Gunakan os.listdir
untuk membuat daftar isi direktori dan os.stat
atau os
untuk mendapatkan metadata file. Fungsi lain dalam os
modul juga mungkin relevan dengan masalah Anda.
Jika Anda mengakses file jarak jauh melalui ssh, cara daftar nama file yang cukup kuat adalah melalui sftp:
echo ls -1 | sftp remote-site:dir
Ini mencetak satu nama file per baris, dan tidak seperti ls
utilitas, sftp
tidak membuat karakter yang tidak dapat dicetak . Anda masih tidak dapat membuat daftar direktori dengan andal di mana nama file berisi baris baru, tapi itu jarang dilakukan (ingat ini sebagai masalah keamanan potensial, bukan masalah kegunaan).
Dengan python (berhati-hatilah bahwa karakter meta shell harus lolos remote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
Untuk interaksi yang lebih kompleks, lihat mode batch sftp dalam dokumentasi.
Pada beberapa sistem (Linux, Mac OS X, mungkin beberapa unix lain, tapi jelas bukan Windows), pendekatan yang berbeda adalah memasang sistem file jarak jauh melalui ssh dengan sshfs , dan kemudian bekerja secara lokal.