我有一个python脚本Link
import requests
requests.get('https://api.telegram.org/******/sendMessage?chat_id=******&text=***** # Send notification to my Telegram
我想运行一个可以加载原始Pastebin并执行它的本地python脚本。
答案 0 :(得分:0)
使用bash怎么样?您可以卷曲然后使用Python执行脚本
1
curl your_url | sudo python -
会将URL的内容打印到标准输出
curl
将指示来源来自stdin
答案 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 的“原始”选项卡相同的内容
接下来,您可以通过以下方式运行 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()
,然后使用 importlib
到 import 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()