Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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
从shell运行Python程序并将变量保留在范围内_Python_Interactive - Fatal编程技术网

从shell运行Python程序并将变量保留在范围内

从shell运行Python程序并将变量保留在范围内,python,interactive,Python,Interactive,Python在解释器中有一个很好的execfile函数,您可以在其中运行程序,将所有变量保留在范围内,然后在空闲时检查它们。但是,据我所知,不能在从命令行获取参数的程序上运行execfile;如果试图包含参数,Python会抛出一个IOError,并抱怨找不到文件(带有空格和参数) 有没有办法运行一个接受命令行参数的Python脚本,并在程序执行后将所有变量保留在作用域中?像一个带有标志的execfile 谢谢, Kevin您可以直接修改sys.argv。文件: # foo.py import

Python在解释器中有一个很好的
execfile
函数,您可以在其中运行程序,将所有变量保留在范围内,然后在空闲时检查它们。但是,据我所知,不能在从命令行获取参数的程序上运行
execfile
;如果试图包含参数,Python会抛出一个
IOError
,并抱怨找不到文件(带有空格和参数)

有没有办法运行一个接受命令行参数的Python脚本,并在程序执行后将所有变量保留在作用域中?像一个带有标志的
execfile

谢谢,
Kevin

您可以直接修改
sys.argv
。文件:

# foo.py
import sys

print sys.argv
另一个文件:

import sys
import shlex   # thanks Matt

old_argv = sys.argv
sys.argv = shlex.split('foo.py is a happy camper')

execfile('foo.py')
输出:

$ python foo.py is a happy camper
['foo.py', 'is', 'a', 'happy', 'camper']
$ python bar.py 
['foo.py', 'is', 'a', 'happy', 'camper']
但我必须说,引用伊格纳西奥·巴斯克斯·艾布拉姆斯的话:


这听起来真是一团糟


不过我假设您有自己的理由。

您可以直接修改
sys.argv
。文件:

# foo.py
import sys

print sys.argv
另一个文件:

import sys
import shlex   # thanks Matt

old_argv = sys.argv
sys.argv = shlex.split('foo.py is a happy camper')

execfile('foo.py')
输出:

$ python foo.py is a happy camper
['foo.py', 'is', 'a', 'happy', 'camper']
$ python bar.py 
['foo.py', 'is', 'a', 'happy', 'camper']
但我必须说,引用伊格纳西奥·巴斯克斯·艾布拉姆斯的话:


这听起来真是一团糟


不过,我假设你有自己的理由。

这听起来有点混乱。为什么不在IPythony中使用like
run blah.py-I 0-m 1
。你应该尽可能避免使用execfile。它有它的用途,但我不认为这个用例是其中之一。伊格纳西奥,你能解释一下为什么吗?我刚刚意识到我可以运行pdb并在程序执行结束时设置一个断点,然后在程序停止时进行检查。我只是希望能够检查所有变量,而不必更改一件事并重新运行程序。这听起来有点混乱。为什么不在IPythony中使用like
run blah.py-I 0-m 1
。您应该尽可能避免使用execfile。它有它的用途,但我不认为这个用例是其中之一。伊格纳西奥,你能解释一下为什么吗?我刚刚意识到我可以运行pdb并在程序执行结束时设置一个断点,然后在程序停止时进行检查。我只是喜欢能够检查所有变量,而不必改变一件事并重新运行程序。我也不会这么做。但是如果我这样做了,我会使用shlex模块来构建新的
sys.argv
,我也不会这么做。但是如果我这样做了,我会使用shlex模块来构建新的
sys.argv