-python 편:python 을 사용 하여 cp 작업 을 모 의 하고 스 크 립 트 를 작성 하여 Liux 에서 cp 작업 을 수행 합 니 다.

3 사례 3:아 날로 그 cp 조작 3.1 문제
cp.py 파일 을 만 들 고 다음 목 표를 실현 합 니 다:
 /bin/ls“  ” /root/   
        

3.2 방안
사용자 원본 파일 이름과 새 파일 이름 을 가 져 오고 원본 파일 을 열 고 새 파일 을 엽 니 다.열 린 원본 파일 에서 데 이 터 를 읽 고 열 린 새 파일 에 기록 하고 두 파일 을 닫 습 니 다.
cp 코드 과정 에서 주의해 야 할 부분 은:
파일 이 너무 크 면 메모리 에 데 이 터 를 직접 읽 을 수 없습니다.이 때 while 순환 문 구 를 사용 하여 데 이 터 를 차례로 읽 습 니 다.4096 바이트 를 읽 을 때마다 데이터 가 비어 있 을 때 순환 을 끝내 고 대상 파일 3.3 단계 에 데 이 터 를 기록 합 니 다.
이 사례 를 실현 하려 면 다음 과 같은 절차 에 따라 진행 해 야 한다.
단계 1:스 크 립 트 작성
 [root@localhost day03]# vim cp.py 
#!/usr/bin/env python3
f1 = open('/bin/ls', 'rb')
f2 = open('/root/ls', 'wb')
data = f1.read()
f2.write(data)
f1.close()
f2.close()

또는 위의 코드 를 다음 과 같은 쓰기 로 바 꿉 니 다.
파일 의 데 이 터 를 반복 적 으로 읽 고 데이터 가 너무 크 지 않도록 합 니 다.
[root@localhost day03]# vim cp2.py 
#!/usr/bin/env python3
src_fname = '/bin/ls'
dst_fname = '/tmp/ls'
src_fobj = open(src_fname, 'rb')
dst_fobj = open(dst_fname, 'wb')
while True:
    data = src_fobj.read(4096)   #    4096  
    if data == b'':              #             ,    
        break
    dst_fobj.write(data)         #          
src_fobj.close()
dst_fobj.close()

또는 위의 코드 를 다음 과 같은 쓰기 로 바 꿉 니 다.
파일 을 열 어 데 이 터 를 읽 거나 기록 하면 파일 이 바로 닫 힙 니 다.
[root@localhost day03]# vim cp3.py 
#!/usr/bin/env python3
src_fname = '/bin/ls'
dst_fname = '/root/ls'
with open(src_fname, 'rb') as src_fobj:
    with open(dst_fname, 'wb') as dst_fobj:
        while True:
            data = src_fobj.read(4096)
            if not data:
                break
            dst_fobj.write(data)

또는 위의 코드 를 다음 과 같은 쓰기 로 바 꿉 니 다.
sys.argv 방법 은 빈 목록 을 표시 합 니 다.스 크 립 트 를 실행 할 때 명령 을 입력 하 십시오:python 3 cpfunc.py/bin/ls/root/ls,sys.argv=[cpfunc.py,'/bin/ls','/root/ls'],그래서 copy 함 수 를 호출 할 때 목록 절편 방식 으로 실제 인삼 을 가 져 옵 니 다('/bin/ls','/root/ls').
[root@localhost day03]# vim cp_func.py 
#!/usr/bin/env python3
import sys
def copy(src_fname, dst_fname):
    src_fobj = open(src_fname, 'rb')
    dst_fobj = open(dst_fname, 'wb')
    while True:
        data = src_fobj.read(4096)
        if not data:
            break
        dst_fobj.write(data)
    src_fobj.close()
    dst_fobj.close()
copy(sys.argv[1], sys.argv[2])

STEP 2:테스트 스 크 립 트 실행
[root@localhost day03]# python3 cp.py
[root@localhost day03]# cd /root
[root@localhost ~]# ls
core  ls
[root@localhost day03]# python3 cp2.py
[root@localhost day03]# cd /root
[root@localhost ~]# ls
core  ls
[root@localhost day03]# python3 cp3.py
[root@localhost day03]# cd /root
[root@localhost ~]# ls
core  ls
[root@localhost day03]# python3 cp_func.py /bin/ls /root/ls
[root@localhost day03]# cd /root
[root@localhost ~]# ls
core  ls

좋은 웹페이지 즐겨찾기