Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将python脚本加载到内存中并像命令行一样执行它?_Python_Python 2.x - Fatal编程技术网

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

如何将python脚本加载到内存中并像命令行一样执行它?,python,python-2.x,Python,Python 2.x,我需要将第三方python脚本加载到内存中,然后像在命令行中一样执行它,类似于在PowerShell中执行iex(new object net.webclient)的方式http:///myscript.ps1”然后调用它 例如,我希望在web服务器上安装我的test.py,然后在本地下载并使用命令行开关在内存中执行它,例如: load("http://<ip>/test.py") exec("test.py -arg1 value -arg2 value") 加载(“http:/

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

例如,我希望在web服务器上安装我的test.py,然后在本地下载并使用命令行开关在内存中执行它,例如:

load("http://<ip>/test.py")
exec("test.py -arg1 value -arg2 value")
加载(“http:///test.py")
exec(“test.py-arg1值-arg2值”)

我很感激这很幼稚,但任何帮助都很感激,谢谢

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

大概是这样的:

导入请求
url=”https://gist.githubusercontent.com/mosbth/b274bd08aab0ed0f9521/raw/52ed0bf390384f7253a37c88c1caf55886b83902/hello.py"
r=请求。获取(url)
script=r.text
执行官(脚本)
资料来源:


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

导入请求
导入系统
sys.argv=['arg1','arg2']
url=”https://gist.githubusercontent.com/itzwam/90cda6e05d918034e75c651448e6469e/raw/0bb293fba68b692b0a3d2b61274f5a075a13f06d/blahblah.py"
script=requests.get(url.text)
执行官(脚本)
要点:

导入系统 类示例(对象): def运行(自): 对于sys.argv中的arg: 打印参数 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 示例().run() 资料来源:


这里有一种利用Python解释器的
-c
选项的黑客方法:

>>> import subprocess
>>> pycode = """
... import sys
... if sys.argv[1] == 'foo':
...     print('bar')
... else:
...     print('unrecognized arg')
... """
>>> result = subprocess.run(['python', '-c', pycode, 'bar'], stdout=subprocess.PIPE)
>>> print(result.stdout.decode())
unrecognized arg

>>> result = subprocess.run(['python', '-c', pycode, 'foo'], stdout=subprocess.PIPE)
>>> print(result.stdout.decode())
bar

这可能会出现一些问题,例如一些平台限制了作为参数传递的内容的大小。我尝试使用
stdin
来实现这一点,Python解释器将接受它,但它不会接受参数

通过将其传递给python解释器
python myscript.py
?谢谢,但我的意思是我已经有了一个正在运行的python进程,该进程将下载并执行脚本,我不希望test.py脚本触及磁盘,我只想在内存中运行它?我的意思是,为了从我的python进程中执行test.py,我不想将它下载到磁盘并运行
exec(“python test.py-arg1值-arg2值”)
,我需要在不写出test.py的情况下实现这一点。如果test.py执行IO,这很好。@roganjosh是的,最简单的解决方案是将文件保存到磁盘,然后使用
子进程执行文件,这将处理args等。不过,思考一下很有趣…@m0rv4i有两个问题:1.f他们不能“接触”“硬盘?2.如果您已经确定了一组工具,为什么不能选择一个函数接口,其中输入是函数的名称及其参数?谢谢!这看起来很接近,但是如果我理解正确,它将逐行执行脚本,对吗?我想要的是以类似于命令行的方式执行它,这样我就可以传递参数并调用
\uuuu main\uuuu
方法,等等。这不起作用。这只是在当前模块名称空间中执行脚本,就好像它是该模块中的文本一样。比如说,您希望能够将参数传递给脚本,并让它像在命令行中那样执行
python myscript.py
,您可以轻松地指定参数,但对于main方法,我不确定PS:我试过了,它似乎调用了uu main uu我编辑了我的消息,并添加了一个关于如何添加参数的示例,但这需要用这个动态执行的模块的名称空间替换主脚本的名称空间,并恶意共享
sys.argv