152

実行可能な python スクリプト内からファイルを作成したいと考えています。

import os
import stat
os.chmod('somefile', stat.S_IEXEC)

os.chmodUNIX のようにパーミッションを「追加」しないようですchmod。最後の行がコメント アウトされている場合、ファイルには filemode があり、-rw-r--r--コメント アウトされていない場合、ファイル モードは---x------です。u+x残りのモードをそのままにして、フラグを追加するにはどうすればよいですか?

4

7 に答える 7

242

を使用os.stat()して現在のアクセス許可を取得し|、ビットの OR を使用os.chmod()して、更新されたアクセス許可を設定するために使用します。

例:

import os
import stat

st = os.stat('somefile')
os.chmod('somefile', st.st_mode | stat.S_IEXEC)
于 2012-10-09T02:19:58.493 に答える
25

実行可能ファイル (スクリプトなど) を生成するツールの場合、次のコードが役立つ場合があります。

def make_executable(path):
    mode = os.stat(path).st_mode
    mode |= (mode & 0o444) >> 2    # copy R bits to X
    os.chmod(path, mode)

これにより、ファイルが作成されたときに有効だったものを(多かれ少なかれ)尊重しumaskます。実行可能ファイルは、読み取り可能なものに対してのみ設定されます。

使用法:

path = 'foo.sh'
with open(path, 'w') as f:           # umask in effect when file is created
    f.write('#!/bin/sh\n')
    f.write('echo "hello world"\n')

make_executable(path)
于 2015-05-26T16:22:19.000 に答える
5

これを行うこともできます

>>> import os
>>> st = os.stat("hello.txt")

ファイルの現在のリスト

$ ls -l hello.txt
-rw-r--r--  1 morrison  staff  17 Jan 13  2014 hello.txt

今、これを行います。

>>> os.chmod("hello.txt", st.st_mode | 0o111)

これがターミナルに表示されます。

ls -l hello.txt    
-rwxr-xr-x  1 morrison  staff  17 Jan 13  2014 hello.txt

ビット単位または 0o111 を使用してすべてを実行可能にし、0o222 を使用してすべてを書き込み可能にし、0o444 を使用してすべてを読み取り可能にすることができます。

于 2015-10-16T21:40:26.520 に答える