从shell运行Python程序并将变量保留在范围内
Python在解释器中有一个很好的从shell运行Python程序并将变量保留在范围内,python,interactive,Python,Interactive,Python在解释器中有一个很好的execfile函数,您可以在其中运行程序,将所有变量保留在范围内,然后在空闲时检查它们。但是,据我所知,不能在从命令行获取参数的程序上运行execfile;如果试图包含参数,Python会抛出一个IOError,并抱怨找不到文件(带有空格和参数) 有没有办法运行一个接受命令行参数的Python脚本,并在程序执行后将所有变量保留在作用域中?像一个带有标志的execfile 谢谢, Kevin您可以直接修改sys.argv。文件: # foo.py import
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中使用likerun blah.py-I 0-m 1
。您应该尽可能避免使用execfile。它有它的用途,但我不认为这个用例是其中之一。伊格纳西奥,你能解释一下为什么吗?我刚刚意识到我可以运行pdb并在程序执行结束时设置一个断点,然后在程序停止时进行检查。我只是喜欢能够检查所有变量,而不必改变一件事并重新运行程序。我也不会这么做。但是如果我这样做了,我会使用shlex模块来构建新的sys.argv
,我也不会这么做。但是如果我这样做了,我会使用shlex模块来构建新的sys.argv
。