Karena os.popen digantikan oleh subprocess.popen, saya bertanya-tanya bagaimana cara mengonversi
os.popen('swfdump /tmp/filename.swf/ -d')
ke subprocess.popen ()
Saya mencoba:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Tapi saya rasa saya tidak menuliskan ini dengan benar. Bantuan apa pun akan dihargai. Terima kasih
python
subprocess
popen
Stupid.Fat.Cat
sumber
sumber
Jawaban:
subprocess.Popen
mengambil daftar argumen:Bahkan ada bagian dari dokumentasi yang dikhususkan untuk membantu pengguna bermigrasi dari
os.popen
kesubprocess
.sumber
shell=True
ini tidak dianjurkan.filename.swf; rm -rf /
nilai nama file. Namun, ini hanya masalah, ketika isi argumen Anda ke Popen tidak aman.shell=True
kecuali saat menggunakan input yang tidak tepercaya . Menyatakan halshell=True
itu tidak disarankan saja sudah menyesatkan.shell=True
, tetapi pengguna acak mana pun yang tersandung pada pertanyaan ini mungkin tidak. Itulah mengapa menurut saya penting untuk menyoroti bahwashell=True
sebenarnya tidak disarankan, kecuali Anda tahu persis apa yang Anda lakukan.shutil.rmtree
contoh. Tapi itu tidak ada hubungannya dengan apakah mereka termasuk dalam stdlib atau tidak. Saya percaya filosofi UNIX tentang "Unix tidak dirancang untuk menghentikan penggunanya melakukan hal-hal bodoh, karena itu juga akan menghentikan mereka melakukan hal-hal pintar." juga berlaku sebagian besar untuk Python.Gunakan sh , itu akan membuat segalanya lebih mudah:
sumber
Menggunakan Subproses dengan cara termudah !!
sumber