在python shell中加载python脚本,就像您键入它一样

时间:2018-10-30 07:05:59

标签: python

假设您在python交互式shell中,然后键入前两行:

>>> import math #just to have a statement as well as an expression
>>> [x * 2 for x in [1, 2, 3, 4]]
[2, 4, 6, 8]
>>>

您可以看到结果是在不使用打印功能的情况下打印的。 现在,如果我们将执行的代码保存在名为tempcode.py的文件中: import math #just to have a statement as well as an expression [x * 2 for x in [1, 2, 3, 4]]

问题是,是否有可能在python shell中加载/执行导致打印结果的文件?

更新:我真正想做的是执行保存在文件中的代码行,并使 python shell 像对待它们一样在其中键入代码。 换句话说,,我需要在文件中写几行代码,而不是在repl中手动输入,让它们都得到相等的输出。 Node.js repl具有此功能:.load

更多澄清性更新:预期行为

>>> aBuiltinThing('tempcode.py')
[2, 4, 6, 8]
>>>

**问题** :python是否具有该aBuiltinThing

3 个答案:

答案 0 :(得分:0)

感谢您的澄清,我已经根据您的更新对答案进行了编辑。另外我不确定您需要打印什么,因为您的python文件可以有n个。变量和方法。最好的方法是执行python文件并将文件的执行对象保存在字典中,该字典可按以下方式使用:-

test.py :-

import pandas as pd

a = [x * 2 for x in [1, 2, 3, 4]]

def return_out():
    return a

实际的python脚本:-

exec_dict = {}
exec(open('C:\\Temp\\test.py').read(), exec_dict)

现在要打印方法return_out的值,可以使用:-

exec_dict['return_out']()
Out[41]: [2, 4, 6, 8]

或获取变量a:-

 exec_dict['a']
 Out[40]: [2, 4, 6, 8]

这将同时适用于python2和python3

答案 1 :(得分:0)

您可以在python shell中运行python文件。像这样

>>> execfile('abc.py')
[2, 4, 6, 8]

abc.py会是这样。

print [x * 2 for x in [1, 2, 3, 4]]

如果从外壳程序执行时在print中删除了abc.py,它将不会打印任何内容。

如果abc.py这样。

[x * 2 for x in [1, 2, 3, 4]]
print 'test'

shell中的结果将是这样。

>>> execfile('abc.py')
test

NB:execfilepython2中。

答案 2 :(得分:0)

如果您愿意在不使用print语句的情况下牺牲stdout来输出,我相信您可以使用

  

python -i tempcode.py

您可以在执行时使用 -i 命令行参数,这应该可以执行您的代码,最后可以让您控制,而不必重写REPL中的整个文件。您将能够照常访问文件的所有变量和其他内容。

您可以在python文档here

中找到更多信息