如何将python脚本加载到内存中并像执行命令行一样执行它?

时间:2019-01-11 22:26:22

标签: python python-2.x

我需要将第三方python脚本加载到内存中,然后像在命令行上一样执行它,类似于在PowerShell中可以执行iex(new-object net.webclient).downloadstring("http://<my ip>/myscript.ps1")然后调用它的方式。

例如,我想将我的 test.py 放在网络服务器上,然后使用命令行开关在本地下载并在内存中执行它,例如:

load("http://<ip>/test.py")
exec("test.py -arg1 value -arg2 value")

我很欣赏这很幼稚,但是对您的帮助也非常感谢,谢谢!

1 个答案:

答案 0 :(得分:3)

我建议您使用请求下载脚本,然后使用exec执行。

类似的东西:

import requests
url="https://gist.githubusercontent.com/mosbth/b274bd08aab0ed0f9521/raw/52ed0bf390384f7253a37c88c1caf55886b83902/hello.py"
r=requests.get(url)
script=r.text
exec(script)

来源:

Why is Python's eval() rejecting this multiline string, and how can I fix it?

https://www.programiz.com/python-programming/methods/built-in/exec

http://docs.python-requests.org/en/master/


如果要为下载的脚本指定参数,可以执行以下操作:

import requests
import sys
sys.argv = ['arg1', 'arg2']
url="https://gist.githubusercontent.com/itzwam/90cda6e05d918034e75c651448e6469e/raw/0bb293fba68b692b0a3d2b61274f5a075a13f06d/blahblah.py"
script=requests.get(url).text
exec(script)

要点:

import sys

class Example(object):
    def run(self):
        for arg in sys.argv:
            print arg
if __name__ == '__main__':
    Example().run()

来源:

https://stackoverflow.com/a/14905087/10902809