3

我正在尝试使用 spyder 而不是 ipython notebook 运行程序,因为它目前运行速度更快。数据是使用导入和提取的

run util/file_reader.py C:/file_address

显然,运行命令在普通 python 中不起作用,我找不到等价物,我在这里和一般情况下查看了各种如何替换 ipython 魔术命令问答,但我找不到运行命令。 ..

是否有一个模块或一组代码可以在普通 python 中作为等效项工作?

4

1 回答 1

2

你想要的有点奇怪。准确地说,run 魔法在当前 ipython 命名空间中运行给定的文件,就好像它是__main__模块一样。要获得完全相同的效果需要一些努力。

with open("util/file_reader.py") as f:
    src = f.read()

# set command line arguments
import sys
sys.argv = ["file_reader.py", "C:/file_address"]

# use "__main__.py" as file name, so module thinks its the main module
code = compile(src, "__main__.py", "exec")
exec(code)

file_reader.py如果在其中定义一个主函数然后在文件末尾调用它会更容易更好if __name__ == "__main__":

例如。

实用程序/file_reader.py

def main(filename):
    print(filename)

if __name__ == "__main__":
    import sys
    main(sys.argv[1])

所以现在你可以通过导入它然后调用main函数来轻松地运行这个模块中的代码。

例如。

import util.file_reader

util.file_reader.main("C:/file_address")
于 2015-11-13T12:00:07.303 回答