Saya ingin membuat file dari dalam skrip python yang dapat dieksekusi.
import os
import stat
os.chmod('somefile', stat.S_IEXEC)
tampaknya os.chmod
tidak 'menambahkan' izin seperti yang chmod
dilakukan unix . Dengan baris terakhir dikomentari, file memiliki filemode -rw-r--r--
, dengan itu tidak dikomentari, mode file adalah ---x------
. Bagaimana saya bisa menambahkan u+x
bendera sambil menjaga mode lainnya tetap utuh?
STAT_OWNER_EXECUTABLE = stat.S_IEXEC
, dan menggunakan konstanta lokal yang dapat dibaca manusia, bukan yang omong kosong.subprocess.check_call(['chmod', '+x', 'somefile'])
dan membuat Anda lebih mudah melakukan operasi sepertia+rx
.Untuk alat yang menghasilkan file yang dapat dieksekusi (misalnya skrip), kode berikut mungkin berguna:
Ini membuatnya (lebih atau kurang) menghormati
umask
yang berlaku saat file dibuat: Executable hanya disetel untuk mereka yang bisa membaca.Pemakaian:
sumber
0444
, Anda akan menggunakan0o444
. Atau, jika ingin mendukung keduanya, tulis saja292
.Jika Anda mengetahui izin yang Anda inginkan, contoh berikut mungkin cara untuk membuatnya tetap sederhana.
Python 2:
Python 3:
Kompatibel dengan (konversi oktal):
contoh izin referensi
sumber
Anda juga bisa melakukan ini
Daftar file saat ini
Sekarang lakukan ini.
dan Anda akan melihat ini di terminal.
Anda dapat menggunakan bitwise atau dengan 0o111 untuk membuat semua dapat dieksekusi, 0o222 untuk membuat semua dapat ditulis, dan 0o444 untuk membuat semua dapat dibaca.
sumber
Hormati
umask
sepertichmod +x
man chmod
mengatakan bahwa jikaaugo
tidak diberikan seperti pada:kemudian
a
digunakan tetapi denganumask
:Berikut adalah versi yang mensimulasikan perilaku itu dengan tepat:
Lihat juga: Bagaimana saya bisa mendapatkan izin file default dengan Python?
Diuji di Ubuntu 16.04, Python 3.5.2.
sumber
Di python3:
Ingatlah untuk menambahkan
0o
awalan karena izin ditetapkan sebagai bilangan bulat oktal, dan Python secara otomatis memperlakukan bilangan bulat apa pun dengan nol di depannya sebagai oktal. Jika tidak, Andaos.chmod("somefile", 1230)
memang melewati , yaitu oktal664
.sumber
chmod +
seperti yang diminta oleh OP, yang harus menambahkan izin baru ke yang sudah ada.Jika Anda menggunakan Python 3.4+, Anda dapat menggunakan pathlib perpustakaan standar yang nyaman .
Its Jalur kelas telah built-in chmod dan Stat metode.
sumber