파이썬 스크립트 전용 폴더가 있습니다.
나는 내가 쓰는 모든 새로운 파이썬 스크립트에서 chmod를하는 데 지쳤다.
파이썬 스크립트 인 경우 폴더 내의 모든 파일을 실행 가능하게 만드는 방법이 있습니까?
새 .py 스크립트가 작성 될 때마다 확인하는 스크립트를 작성하는 것이 좋으며 새 .py 스크립트가 있으면 즉시 실행 가능하게 만듭니다.
- Vim을 사용합니다.
파이썬 스크립트 전용 폴더가 있습니다.
나는 내가 쓰는 모든 새로운 파이썬 스크립트에서 chmod를하는 데 지쳤다.
파이썬 스크립트 인 경우 폴더 내의 모든 파일을 실행 가능하게 만드는 방법이 있습니까?
새 .py 스크립트가 작성 될 때마다 확인하는 스크립트를 작성하는 것이 좋으며 새 .py 스크립트가 있으면 즉시 실행 가능하게 만듭니다.
답변:
또 다른 좋은 옵션은 Incron 입니다. 주어진 위치에 대해 지정 가능한 조건으로 inotify에서 작동합니다.
따라서이 폴더를 보면서 파일이 생성되면 명령을 실행하십시오.
샘플 incrontab처럼 ...
/path/to/scripts IN_CREATE chmod +x $@$# # <--- this arcane bit is path ($@) + file ($#)
마찬가지로 경로 / 파일을 bash 스크립트의 인수로 사용하여 .py
필요한 경우 확장명 별로 필터링 할 수 있습니다 .
chmod +x /path/to/python/scripts/dir/*.py
/ path / to / python / scripts / dir.py
디렉토리의 모든 현재 파일을 실행 가능하게 만듭니다 .
나는 당신이 설명하는 자동 도구를 모른다. 편집기에 매크로를 사용 하여이 작업을 수행 할 수는 있지만 사용하는 편집기로는 사용할 수 없습니다. ;-)
*.py
입니다. 또한 OPs 스크립트는 표준 사용자 ID가 소유하고 있다고 가정하므로에 대한 필요성이 표시되지 않습니다 sudo
. 모두에게 행운을 빕니다.
첫 번째 단계로 다음을 시도해 볼 수 있습니다 ~/.vimrc
.
autocmd BufWritePost *.py silent execute "! chmod +x %"
chmod +x
파일에 .py
쓸 때 모든 파일 의 파일 이름으로 실행됩니다 . 이벤트 목록 ( :h events
)을 보면 새 파일이 생성 되는 이벤트를 찾을 수 없으므로 파일을 쓸 때마다 실행하도록 설정해야합니다.를 처음 chmod
적용하면 파일이 변경되고 다음과 같이 vim
경고합니다.
"test.py" [New] 0L, 0C written
W16: Warning: Mode of file "test.py" has changed since editing started
See ":help W16" for more info.
[O]K, (L)oad File:
나는 autoread
이 변화 를 위해 몇 가지 트릭을 시도 했지만 운이 없다. 따라서 Enter두 번 눌러야 합니다.
시작되면 아래 스크립트는 디렉토리에서 주어진 유형 (확장자)의 모든 파일의 권한을 한 번에 자동으로 변경합니다. 그런 다음 스크립트는 5 초마다 디렉토리에 새로 추가 된 파일이 있는지 확인 하고 파일이 지정된 유형 (이 경우 .py
파일) 인 경우 권한을 변경합니다.
여기에는 몇 가지 옵션이 있습니다.이 경우 새로 추가 된 파일을 실행 가능하게 만들지 만 행에 정의 된대로 다른 작업도 가능합니다 command = "chmod +x"
. 또한 작업을 수행 할 파일 종류 (언어 확장명)를 정의 (변경) 할 수 있습니다.
아래 스크립트를 빈 파일로 복사하십시오. 다른 이름으로 저장하고 change_permission.py
다음 명령으로 백그라운드에서 실행하십시오.
python3 <script> <folder_to_watch>
#!/usr/bin/env python3
import subprocess
import time
import sys
directory = sys.argv[1]
command = "chmod +x"; check_interval = 5; extensions = (".py")
def current_files():
read = subprocess.check_output(["ls", directory]).decode("utf-8").strip()
return [item for item in read.split("\n") if item[item.rfind("."):] in extensions]
initial_files = current_files()
for file in initial_files:
subprocess.call(["/bin/bash", "-c", command+" "+directory+"/"+file])
while True:
update = current_files()
for file in update:
if not file in initial_files:
subprocess.call(["/bin/bash", "-c", command+" "+directory+"/"+file])
initial_files = update
time.sleep(check_interval)
* 참고 : sudo 권한이 필요한 경우 다음을 사용하여 스크립트를 실행하십시오. sudo
다음은 도움이 될 수있는 몇 가지 명령이있는 정보입니다. http://ss64.com/bash/syntax-permissions.html
find . -type f -print0 | xargs -0 chmod 775 # change all file permissions in current directory
find . -type d -print0 | xargs -0 chmod 755 # change directory permissions
다음 헤더 스크립트를 사용할 수 있습니다. 장소 mkscript.sh
당신에 $PATH
. mkscript.sh
파이썬 스크립트가 저장된 작업 디렉토리에서 실행 하십시오. 스크립트는 유용한 헤더 정보를 생성하고 스크립트 제목을 지정하여 실행 가능하게 한 다음 선택한 편집기를 엽니 다. 귀하의 경우에는 VIM.
수정 mkscript.sh
했습니다. 파이썬 확장명을 가진 스크립트를 생성합니다.*.py
변수 ${PYTHON_VERSION}
가 호출 PYTHON_VERSION="/usr/bin/python --version"
되어 /etc/environment
파일 에 추가되었습니다 . 한 번 봐 가지고 https://help.ubuntu.com/community/EnvironmentVariables을
#!/bin/bash -
#title :mkscript.sh
#description :This script will make a header for a PYTHON script.
#author :bgw
#date :20111101
#version :0.4
#usage :bash mkscript.sh
#notes :Install Vim and Emacs to use this script.
#bash_version :4.1.5(1)-release
#==============================================================================
today=$(date +%Y%m%d)
div=======================================
/usr/bin/clear
_select_title(){
# Get the user input.
printf "Enter a title: " ; read -r title
# Remove the spaces from the title if necessary.
title=${title// /_}
# Convert uppercase to lowercase.
title=${title,,}
# Add .sh to the end of the title if it is not there already.
[ "${title: -3}" != '.py' ] && title=${title}.py
# Check to see if the file exists already.
if [ -e $title ] ; then
printf "\n%s\n%s\n\n" "The script \"$title\" already exists." \
"Please select another title."
_select_title
fi
}
_select_title
printf "Enter a description: " ; read -r dscrpt
printf "Enter your name: " ; read -r name
printf "Enter the version number: " ; read -r vnum
# Format the output and write it to a file.
printf "%-16s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%s\n\n\n" '#!/usr/bin/python -' '#title' ":$title" '#description' \
":${dscrpt}" '#author' ":$name" '#date' ":$today" '#version' \
":$vnum" '#usage' ":./$title" '#notes' ':' '#python_version' \
":${PYTHON_VERSION}" \#$div${div} > $title
# Make the file executable.
chmod +x $title
/usr/bin/clear
_select_editor(){
# Select between Vim or Emacs.
printf "%s\n%s\n%s\n\n" "Select an editor." "1 for Vim." "2 for Emacs."
read -r editor
# Open the file with the cursor on the twelth line.
case $editor in
1) vim +12 $title
;;
2) emacs +12 $title &
;;
*) /usr/bin/clear
printf "%s\n%s\n\n" "I did not understand your selection." \
"Press <Ctrl-c> to quit."
_select_editor
;;
esac
}
_select_editor
vim
하거나emacs
수행 할 수 있습니다.