Python从原始链接(pastebin)加载python脚本

时间:2018-10-01 09:32:09

标签: python-3.x pastebin

我有一个python脚本Link

import requests
requests.get('https://api.telegram.org/******/sendMessage?chat_id=******&text=*****  # Send notification to my Telegram

我想运行一个可以加载原始Pastebin并执行它的本地python脚本。

2 个答案:

答案 0 :(得分:0)

使用bash怎么样?您可以卷曲然后使用Python执行脚本

1
  • curl your_url | sudo python - 会将URL的内容打印到标准输出

  • curl将指示来源来自stdin

curl and run python script

有关

答案 1 :(得分:0)

与需要 Bash 的 other answer 相比,这是一个纯 Python 解决方案。

首先,您可以使用 requests 模块的 requests.content 获取 Pastebin 链接的原始内容:

import requests

pastebin_raw_link = 'https://pastebin.com/raw/xxxxxxxx'
response = requests.get(pastebin_raw_link)
source_code = response.content

print(source_code.decode('utf-8'))

这应该打印出与 Pastebin 的“原始”选项卡相同的内容
Pastebin raw

接下来,您可以通过以下方式运行 source_code

  • 选项 1:调用 exec

    exec(source_code)
    

    这通常是 How do I execute a string containing Python code in Python? 接受的答案 它通常也被认为是不安全的,如Why should exec() and eval() be avoided? 等帖子中所讨论的确保您真的相信 Pastebin 链接.

  • 选项 2:将其写入 tempfile.NamedTemporaryFile(),然后使用 importlibimport Python modules directly from a source file

    import importlib.util
    import sys
    import tempfile
    
    with tempfile.NamedTemporaryFile(suffix='.py') as source_code_file:
        # Should print out something like '/var/folders/zb/x14l5gln1b762gjz1bn63b1sxgm4kc/T/tmp3jjzzpwf.py' depending on the OS
        print(source_code_file.name)
    
        source_code_file.write(source_code)
        source_code_file.flush()
    
        # From Python docs recipe on "Importing a source file directly"
        module_name = 'can_be_any_valid_python_module_name'
        spec = importlib.util.spec_from_file_location(module_name, source_code_file.name)
        module = importlib.util.module_from_spec(spec)
        sys.modules[module_name] = module
        spec.loader.exec_module(module)
    

    这类似于手动复制 Pastebin 链接的内容,将其粘贴到同一目录中的某个文件(例如“test.py”),然后将其作为 import test 导入,从而执行文件内容。

    也可以不使用 tempfile.NamedTemporaryFile,但是您必须手动删除您创建的文件。 tempfile 模块已经为您执行此操作:“文件关闭后立即删除”。

    此外,将其作为模块导入的好处在于它像任何其他 Python 模块一样。意思是,例如,您的 Pastebin 链接声明了一些变量或方法,然后您可以这样做:

    module.some_variable
    module.call_some_method()