3 python shell terminal python-2.7 python-3.x
当我运行终端然后访问python3 shell时,我可以使用import运行文件或模块,但如果我尝试再次运行它,则没有任何反应.
之前我看过这个问题:[ 每次对脚本进行更改时,都需要在终端中重启python
我阅读了文档:[ https://docs.python.org/3/tutorial/modules.html#executing-modules-as-scripts] [1 ]
但两者都在讨论重新启动模块中的单个功能.我在谈论重新运行整个文件.我将此代码包含在我的文件末尾,但仍然没有发生任何事情
if __name__ == "__main__":
pass
Run Code Online (Sandbox Code Playgroud)
更新: 我在评论中运行文件后,这就是我得到的:
Ms-MBP:mine M$ python3
Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> python python_file.py
File "<stdin>", line 1
python python_file.py
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,如果你在终端中工作,你应该使用命令(记得从主shell执行此操作,即可能是bash,而不是来自Python shell)
$ python script.py
Run Code Online (Sandbox Code Playgroud)
这是执行python文件的预期方法.您通常可以使用键盘上的向上箭头快速循环回到上一个命令.
但是,如果由于某些原因确实需要从交互式解释器运行脚本,那么有一些选项,虽然要注意它们有点hacky并且可能不是运行代码的最佳方式,尽管这可能因你的具体用例是.
如果您的脚本hello.py具有以下来源:
print("hello world")
Run Code Online (Sandbox Code Playgroud)
在python3中,您可以从shell执行以下操作:
>>> from importlib import reload
>>> import hello
hello world
>>> reload(hello)
hello world
<module 'hello' from '/home/izaak/programmeren/stackoverflow/replrun/hello.py'>
Run Code Online (Sandbox Code Playgroud)
这是文档importlib.reload.如您所见,这复制了脚本的副作用.第二部分是repr()模块的部分,因为reload()函数返回模块 - 这没什么可担心的,它是解释器工作方式的一部分,因为它打印你输入的任何东西的值 - 例如你可以做
>>> 2 + 3
5
Run Code Online (Sandbox Code Playgroud)
而不是必须明确print(2 + 3).如果这真的打扰你,你可以做到
>>> from importlib import reload as _reload
>>> def reload(mod):
... _reload(mod)
...
>>> import hello
hello world
>>> reload(hello)
hello world
Run Code Online (Sandbox Code Playgroud)
但是,使用if您找到的语句(这也是评论中的建议),您的脚本看起来更像是惯用的:
def main():
print("hello world")
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
这样,您可以从Python shell中执行以下操作:
>>> import hello
>>> hello.main()
hello world
>>> hello.main()
hello world
Run Code Online (Sandbox Code Playgroud)
这是非常好的做法.if此处的语句检查脚本是否作为"主"脚本执行(如直接从命令行运行,如我的第一个建议),如果是,则执行main函数.这意味着如果另一个脚本想要import它,脚本将不会执行任何操作,从而使其更像一个模块.
如果您正在使用IPython,您可能会知道这一点,但这会变得更容易,您可以做到
In [1]: %run hello.py
hello world
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |