파이썬 내에서 간단한“chmod + x”를 어떻게 수행합니까?
실행 가능한 Python 스크립트 내에서 파일을 만들고 싶습니다.
import os
import stat
os.chmod('somefile', stat.S_IEXEC)
os.chmod
유닉스 chmod
처럼 권한을 '추가'하지 않는 것으로 보입니다 . 마지막 줄을 주석 처리하면 파일에 filemode가 있고 -rw-r--r--
주석 처리되지 않은 파일 모드는 ---x------
. u+x
나머지 모드는 그대로 유지하면서 플래그를 추가하려면 어떻게 해야합니까?
사용하여 os.stat()
현재 권한을 사용 얻기 위해 |
함께 또는 비트를, 사용은 os.chmod()
업데이트 된 권한을 설정할 수 있습니다.
예:
import os
import stat
st = os.stat('somefile')
os.chmod('somefile', st.st_mode | stat.S_IEXEC)
실행 파일 (예 : 스크립트)을 생성하는 도구의 경우 다음 코드가 도움이 될 수 있습니다.
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)
원하는 권한을 알고 있다면 다음 예제를 통해 간단하게 유지할 수 있습니다.
파이썬 2 :
os.chmod("/somedir/somefile", 0775)
파이썬 3 :
os.chmod("/somedir/somefile", 0o775)
다음 중 하나와 호환 가능 (8 진 변환) :
os.chmod("/somedir/somefile", 509)
참조 권한 예
당신은 또한 이것을 할 수 있습니다
>>> 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를 사용하여 모두 읽기 가능하게 만들 수 있습니다.
존경 umask
하는chmod +x
man chmod
augo
다음과 같이 주어지지 않으면 다음과 같이 말합니다 .
chmod +x mypath
그런 다음 a
사용되지만 다음 과 함께 사용됩니다 umask
.
A combination of the letters ugoa controls which users' access to the file will be changed: the user who owns it (u), other users in the file's group (g), other users not in the file's group (o), or all users (a). If none of these are given, the effect is as if (a) were given, but bits that are set in the umask are not affected.
Here is a version that simulates that behavior exactly:
#!/usr/bin/env python3
import os
import stat
def get_umask():
umask = os.umask(0)
os.umask(umask)
return umask
def chmod_plus_x(path):
os.chmod(
path,
os.stat(path).st_mode |
(
(
stat.S_IXUSR |
stat.S_IXGRP |
stat.S_IXOTH
)
& ~get_umask()
)
)
chmod_plus_x('.gitignore')
See also: How can I get the default file permissions in Python?
Tested in Ubuntu 16.04, Python 3.5.2.
In python3:
import os
os.chmod("somefile", 0o664)
Remember to add the 0o
prefix since permissions are set as an octal integer, and Python automatically treats any integer with a leading zero as octal. Otherwise, you are passing os.chmod("somefile", 1230)
indeed, which is octal of 664
.
If you're using Python 3.4+, you can use the standard library's convenient pathlib.
Its Path class has built-in chmod and stat methods.
from pathlib import Path
f = Path("/path/to/file.txt")
f.chmod(f.stat().st_mode | stat.S_IEXEC)
참고URL : https://stackoverflow.com/questions/12791997/how-do-you-do-a-simple-chmod-x-from-within-python
'programing' 카테고리의 다른 글
코드 변경시 Sails.js 앱을 자동으로 다시로드합니까? (0) | 2020.08.16 |
---|---|
이메일 제목의 애니메이션 아이콘 (0) | 2020.08.16 |
Spinner의 드롭 다운에 다른 테마를 설정하려면 어떻게해야합니까? (0) | 2020.08.16 |
.gitignore 파일, xcode 프로젝트에서 어디에 넣어야합니까? (0) | 2020.08.16 |
DataFrame에서 문자열을 부동 소수점으로 변환 (0) | 2020.08.16 |