Quiero crear un archivo desde un script de Python que sea ejecutable.
import os
import stat
os.chmod('somefile', stat.S_IEXEC)
parece os.chmodque no 'agrega' permisos como lo chmodhace Unix . Con la última línea comentada, el archivo tiene el -rw-r--r--modo de archivo, sin comentar, el modo de archivo es ---x------. ¿Cómo puedo simplemente agregar la u+xbandera manteniendo intactos el resto de los modos?

STAT_OWNER_EXECUTABLE = stat.S_IEXEC, y usaría la constante local legible por humanos en lugar del galimatías.subprocess.check_call(['chmod', '+x', 'somefile'])y le permite realizar operaciones comoa+rx.Para las herramientas que generan archivos ejecutables (por ejemplo, scripts), el siguiente código puede ser útil:
Esto hace que se respete (más o menos) lo
umaskque estaba en vigor cuando se creó el archivo: Ejecutable solo está configurado para aquellos que pueden leer.Uso:
fuente
0444, usarías0o444. O, si desea apoyar a ambos, simplemente escriba292.Si conoce los permisos que desea, el siguiente ejemplo puede ser la forma de simplificarlo.
Python 2:
Python 3:
Compatible con (conversión octal):
ejemplos de permisos de referencia
fuente
También puedes hacer esto
Listado actual del archivo
Ahora hacer esto.
y verá esto en la terminal.
Puede bit a bit o con 0o111 para hacer todo ejecutable, 0o222 para hacer que todo se pueda escribir y 0o444 para hacer que todo sea legible.
fuente
Respeto
umaskcomochmod +xman chmoddice que siaugono se da como en:luego
ase usa pero conumask:Aquí hay una versión que simula ese comportamiento exactamente:
Consulte también: ¿Cómo puedo obtener los permisos de archivo predeterminados en Python?
Probado en Ubuntu 16.04, Python 3.5.2.
fuente
En python3:
Recuerde agregar el
0oprefijo ya que los permisos se establecen como un entero octal y Python trata automáticamente cualquier entero con un cero a la izquierda como octal. De lo contrario, está pasando deos.chmod("somefile", 1230)hecho, que es octal de664.fuente
chmod +como lo solicita OP, que debería agregar nuevos permisos a los existentes.Si está usando Python 3.4+, puede usar el conveniente pathlib de la biblioteca estándar .
Su clase Path tiene métodos chmod y stat integrados .
fuente