2012-12-19 3 views
0

내 검색 및 파괴 유형 프로그램이 헛되지 않았습니다. 나는 성공적으로 목록을 만들었지 만 프로그램은 PermissionError에 끝납니다. 내 코드는 다음과 간다 :목록에있는 파일에 액세스 할 수 있습니다.

import os 
count=0 
while(count<4): 
    file_list=[] 
    for root, dirs, files in os.walk(os.path.expandvars('%windir%')): 
     for f_name in files: 
      if f_name=='infected-file-1': 
       file_list.append(root+"\\"+f_name) 
       str1='\n'.join(file_list) 
       for x in str1.split('\n'): pass 
       os.remove(x) 
       continue 
      for root, dirs, files in os.walk(os.path.expandvars('%windir%')): 
       for f_name in files: 
        if f_name=='infected-file-2': 
         file_list.append(root+"\\"+f_name) 
         str1='\n'.join(file_list) 
         for z in str1.split('\n'): pass 
         os.remove(z) 

이 프로그램은 잘 시작하지만 파일을 삭제 할 수 없습니다 않습니다 내가 takeown 사용 os.system을 사용할 계획되었다 권한 오류 그래서

이있는 한 완전한 제어권을 얻으려면 어떻게해야합니까? 예 : os.system("takeown /f x") 여기서 'x'= 파이썬 변수

file_list 인쇄물을 사용하여 takeown을 사용하고 takeown을 사용하는 것이 좋습니다.하지만 그렇지는 않습니다. 내가 원하는거야. [내 프로그램에 사용자 상호 작용을 포함시키지 마십시오]

while 명령은 파일이 더 이상 존재하지 않도록 프로세스를 반복하는 데 사용됩니다! 난 그냥 파일에 대한 액세스를 얻기 위해이 코드 os.system("cmd /c takeown /f "+x)를 배치

) 후 삭제 성공, P가 걸린 모든 일부 평화의 마음을했다 :

+0

나는 왜'append'를하고,'join'을하고,'split'을 반복하지만 루프 변수는 아무것도하지 않는다는 것을 이해하지 못합니다. 유일한 포인트는'file_list'의 마지막 엔트리에'z'를 설정하는 것이지만,'z = file_list [-1]'은 똑같이해야합니다. 내가 뭘 놓치고 있니? – DSM

+0

@DSM : 실제로는 append를 사용하여 삭제할 파일을 인쇄합니다. 이전에 내가 기억할 수없는 오류가 발생하여 조인이 사용되었습니다. 저는 파이썬에서 초보자입니다. 그래서 그 코드를 편집하는 것이 두렵습니다. 하지만 당신은 나에게 요점을주지. 나는 그것을 들여다 볼 것이다 :) –

답변

0

나는 해결책을 발견했다. 초보자로서

, 이것은 당신이 당신은 정말 사용해야

+0

나는 윈도우에 관해 많이 모른다. 그러나 특수 문자를 올바르게 처리 할 것인가? – DSM

+0

이 솔루션은 효과가있는 것처럼 보이지만 @MartijnPieters가 제공 한 조언을받는 것이 좋습니다. 장기적으로는 훨씬 더 유연한 접근 방식이며 좋은 습관을 일찍 배울 수 있습니다. – mgilson

+0

@DSM gr8 작업 중입니다. –

2

을 유래

는 감사 성과입니다 subprocess module 대신 os.system의 :

import subprocess 

subprocess.call(['takeown', '/f', x]) 

.call() function의 첫 번째 인수의 목록입니다 명령 자체를 포함하여 명령 인수. 해당 목록의 요소로 변수 x 만 사용하면됩니다.

관련 문제