Python主机文件注入器

2024-09-17 07:40:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个函数中遇到了一些问题,该函数应该标识您的操作系统并返回到该主机文件的相应路径,以便程序可以读取该文件并向其中添加更多行。当函数返回“TypeError:应为str、bytes或os.PathLike对象,而不是NoneType”时,问题依赖于将函数调用到open()语句中。这是我的密码:

import time
import os 
import platform
from datetime import datetime as dt
from sys import platform as _platform

def osFinder():
    if _platform == "Linux" or _platform == "Linux2":
        return "/etc/hosts"
    elif _platform == "darwin":
        return "/etc/hosts"
    elif _platform == "win32":
        return r"C:\Windows\System32\drivers\etc\hosts"
    elif _platform == "win64":
        return r"C:\Windows\System32\drivers\etc\hosts"

# Host Files PATH:
# windows_path = r"C:\Windows\System32\drivers\etc\hosts"
# unix_path = "/etc/hosts"
temp_path = osFinder()

redirect = "127.0.0.1"

sitesList = [
    "www.facebook.com",
    "www.netflix.com",
    "www.youtube.com"
]

from_hour = 7
to_hour = 16

while True:
    if dt(dt.now().year, dt.now().month, dt.now().day, from_hour) < dt.now() < dt(dt.now().year, dt.now().month, dt.now().day, to_hour):
        print("Working")
        with open(temp_path, 'r+') as file:
            content = file.read()
            for site in sitesList:
                if site in content:
                    pass
                else:
                    file.write(redirect + " " + site + "\n")
    else:
        print("Happy Streaming")
        with open(temp_path, 'r+') as file:
            content = file.readlines()
            file.seek(0)
            for line in content:
                if not any(site in line for site in sitesList):
                    file.write(line)
            file.truncate()
    time.sleep(1)

Tags: pathinfromimportreturnifasdt
1条回答
网友
1楼 · 发布于 2024-09-17 07:40:00

osFinder中,平台名称不正确(all values in the doc)。“linux”没有资本,“linux2”从python3.3开始就不存在了

我只是写osFinder

from sys import platform as _platform


def osFinder():
    if _platform == "linux":
        return "/etc/hosts"
    elif _platform == "darwin":
        return "/etc/hosts"
    elif _platform == "win32":
        return r"C:\Windows\System32\drivers\etc\hosts"

这可以用一种更像Python的方式重写:

from sys import platform as _platform


PATH_FOR_PLATFORM = {
    "linux": "/etc/hosts", 
    "darwin": "/etc/hosts",
    "win32": r"C:\Windows\System32\drivers\etc\hosts"
}
temp_path = PATH_FOR_PLATFORM[_platform]

希望有帮助

相关问题 更多 >