Je souhaite créer un fichier à partir d'un script python exécutable.
import os
import stat
os.chmod('somefile', stat.S_IEXEC)
il semble os.chmod
ne pas «ajouter» de permissions comme le fait unix chmod
. Avec la dernière ligne commentée, le fichier a le mode fichier -rw-r--r--
, sans commenter, le mode fichier est ---x------
. Comment puis-je simplement ajouter le u+x
drapeau tout en conservant le reste des modes intacts?
STAT_OWNER_EXECUTABLE = stat.S_IEXEC
, et j'utiliserais la constante locale lisible par l'homme au lieu du charabia.subprocess.check_call(['chmod', '+x', 'somefile'])
et vous permet de faire plus facilement des opérations commea+rx
.Pour les outils qui génèrent des fichiers exécutables (par exemple des scripts), le code suivant peut être utile:
Cela le rend (plus ou moins) respectueux de celui
umask
qui était en vigueur lorsque le fichier a été créé: l'exécutable n'est défini que pour ceux qui savent lire.Usage:
la source
0444
, vous utiliseriez0o444
. Ou, si vous souhaitez prendre en charge les deux, écrivez simplement292
.Si vous connaissez les autorisations souhaitées, l'exemple suivant peut être le moyen de rester simple.
Python 2:
Python 3:
Compatible avec l'un ou l'autre (conversion octale):
exemples d'autorisations de référence
la source
Vous pouvez également le faire
Liste actuelle du fichier
Maintenant fais ça.
et vous verrez cela dans le terminal.
Vous pouvez bit à bit ou avec 0o111 pour rendre tout exécutable, 0o222 pour rendre tout accessible en écriture et 0o444 pour rendre tout lisible.
la source
Respect
umask
commechmod +x
man chmod
dit que siaugo
n'est pas donné comme dans:puis
a
est utilisé mais avecumask
:Voici une version qui simule exactement ce comportement:
Voir aussi: Comment puis-je obtenir les autorisations de fichier par défaut en Python?
Testé dans Ubuntu 16.04, Python 3.5.2.
la source
En python3:
N'oubliez pas d'ajouter le
0o
préfixe car les autorisations sont définies comme un entier octal et Python traite automatiquement tout entier avec un zéro non significatif comme octal. Sinon, vous passez enos.chmod("somefile", 1230)
effet, ce qui est octal de664
.la source
chmod +
comme demandé par OP, ce qui devrait ajouter de nouvelles autorisations aux autorisations existantes.Si vous utilisez Python 3.4+, vous pouvez utiliser le pathlib pratique de la bibliothèque standard .
Sa classe Path a des méthodes chmod et stat intégrées .
la source