Ls ถูกออกแบบมาเพื่อการบริโภคของมนุษย์และ คุณไม่ควรแยกเอาท์พุท
ในเชลล์สคริปต์มีบางกรณีที่การแยกเอาต์พุตของ ls ทำงานเป็นวิธีที่ง่ายที่สุดในการบรรลุเอฟเฟกต์ที่ต้องการ เนื่องจาก ls อาจรวมอักขระที่ไม่ใช่ ASCII และอักขระควบคุมเข้าด้วยกันในชื่อไฟล์กรณีเหล่านี้เป็นชุดย่อยของอักขระที่ไม่ต้องการรับชื่อไฟล์จากlsและการควบคุมตัวอักษรในชื่อไฟล์กรณีเหล่านี้เป็นส่วนหนึ่งของผู้ที่ไม่จำเป็นต้องได้รับชื่อไฟล์จาก
lsในหลามอย่างมีเหตุผลที่จะก่อให้เกิดไม่มี Python มีlsฟังก์ชันการทำงานทั้งหมดในตัว ใช้os.listdirเพื่อแสดงรายการเนื้อหาของไดเรกทอรีและos.statหรือosเพื่อรับข้อมูลเมตาของไฟล์ ฟังก์ชั่นอื่น ๆ ในosโมดูลมีแนวโน้มที่จะเกี่ยวข้องกับปัญหาของคุณเช่นกัน
หากคุณกำลังเข้าถึงไฟล์ระยะไกลผ่าน ssh วิธีที่มีประสิทธิภาพในการระบุชื่อไฟล์คือ sftp:
echo ls -1 | sftp remote-site:dir
พิมพ์ชื่อไฟล์หนึ่งชื่อต่อบรรทัดและแตกต่างจาก lsยูทิลิตีที่sftpไม่สามารถพิมพ์อักขระที่ไม่สามารถพิมพ์ได้ คุณจะยังคงไม่สามารถแสดงรายการไดเรกทอรีที่เชื่อถือได้ซึ่งชื่อไฟล์มีการขึ้นบรรทัดใหม่ แต่ทำได้ยาก (โปรดจำไว้ว่านี่เป็นปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นไม่ใช่ปัญหาการใช้งาน)
ในไพ ธ อน (ระวังว่าเชลล์เมตาอักขระต้องอยู่ในหนีremote_dir):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
สำหรับการโต้ตอบที่ซับซ้อนยิ่งขึ้นค้นหาโหมดแบตช์ของ sftp ในเอกสาร
ในบางระบบ (Linux, Mac OS X, อาจจะเป็น unices อื่น ๆ แต่ไม่ใช่ Windows) วิธีที่แตกต่างคือการติดตั้งระบบไฟล์ระยะไกลผ่าน ssh ด้วยsshfsแล้วทำงานในพื้นที่