【问题标题】:gain access to file in list访问列表中的文件
【发布时间】:2012-12-19 15:57:49
【问题描述】:

我的搜索和销毁型程序以徒劳无功而告终。我已成功编排列表,但程序在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)

程序启动良好,但由于权限错误无法删除文件

所以我打算使用 os.system 来使用 takeown 来获得完全控制,但是我如何在语法中使用它,即os.system("takeown /f x") where 'x'=python variable

您可能会建议我使用打印 file_list 来获取文件的地址,然后使用 takeown 但这不是我想要的。 [我的程序没有包含用户交互]

while 命令用于重复该过程以确保文件不再存在!

【问题讨论】:

  • 我不明白为什么你先append,然后是join,然后循环split,但对循环变量什么也不做。看起来唯一的一点是将z 设置为file_list 的最后一个条目,但z = file_list[-1] 应该这样做。我错过了什么?
  • @DSM:其实append是用来打印要删除的文件的;使用 join 是因为我之前遇到了一个我现在不记得的错误。我是 Python 的初学者,所以我害怕在那里编辑该代码。但你确实给了我一点。我会调查一下谢谢:)

标签: python file-io python-3.x


【解决方案1】:

你真的应该使用subprocess module 而不是os.system

import subprocess

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

.call() function 的第一个参数是命令参数列表,包括命令本身。只需使用变量x 作为该列表的元素。

【讨论】:

    【解决方案2】:

    我找到了解决方案 :P 所需要的只是一些安心;)

    我只是放置了这个代码os.system("cmd /c takeown /f "+x) 来获取文件的访问权限,然后删除成功。

    作为一个新手,这是一个成就

    感谢 StackOverFLOW

    【讨论】:

    • 我对 Windows 了解不多,但它会正确处理特殊字符吗?
    • 虽然这个解决方案看起来很有效,但我强烈建议您采纳@MartijnPieters 提供的建议——从长远来看,这是一种更加灵活的方法,并且尽早学习好习惯是值得的 :)
    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多