如何在Python控制台中运行带有其选项的.py文件?

时间:2020-02-23 05:10:26

标签: python pycharm

我正在尝试在python中运行this GitHub project,但是我只能使用Pycharm IDE的终端运行它。

根据GitHub存储库中的指南,我从$的开头删除了$ python train.py RGCN PPI符号,并可以在那里运行它。 $在这里是什么意思,如何在Python控制台中运行这样的文件(例如,在>>>符号之后)?

1 个答案:

答案 0 :(得分:2)

'$'不是Python语法的一部分,它是表示命令提示符的文档中的直观提示。

要回答本文标题的问题,我将提供一些信息 首先说明如何将脚本加载到Python控制台。 但是,对于您的特定情况,则不需要此。向下滚动到 有关PyCharm中调试的部分。

有两种方法可以将脚本放入控制台。一种是简单地使用我在下面给出的两行代码的正确版本来加载它,或者可以将它作为模块加载-即使它原本不是一个模块。

通常,要在Python 2上的Python Shell中执行脚本,您可以

>>> execfile(r"<path to script here>")

在Python 3上,它更冗长:

>>> exec(open(r"<path to script here>").read())

其效果就像您将脚本剪切-n-粘贴到控制台中一样。控制台的全局作用域将获取文件中最左缩进的所有函数,类和变量。另外,它可能不会运行您的if __name__ == '__main__':块。但是你可以破解。

如果要将vars / classes / etc放置在控制台全局范围之外的其他范围内,则上述命令还有两个附加参数。第一个是globals的字典,另一个是locals的字典。您只需提供globals参数就可以摆脱困境-它只是您所需的普通字典对象。

如果要加载的文件是模块,则可以通过将其主文件夹附加到Python模块搜索路径,并使用import指令,将其导入,就像导入其他模块一样。即使不打算将其作为模块,也可以通过这种方式加载脚本。

>>> import sys
>>> sys.path.append(r'/Users/todd/projects/mymodule_folder')
>>> import mymodule

如果您对其进行了修改并想要重新加载它:

>>> import importlib
>>> importlib.reload(mymodule)

将脚本作为模块加载可以避免污染控制台的全局范围。加载后,只需在脚本函数和变量的名称前加上模块名称即可。模块名称将是不带扩展名.py的文件的名称。

如果脚本需要命令行选项,则可以将这些值硬编码到脚本中,并禁用尝试从CLI获取值的代码行。如果变得复杂,请考虑按照下一节中的说明在IDE中运行。

因此,以上就是您可以在所需的任何Python REPL控制台中运行python脚本的方法。

但是根本无法将脚本加载到Python控制台中 为您的目的所必需。您想调试一些脚本(train.py, test.py)来自此项目: https://github.com/microsoft/tf-gnn-samples)。

使用PyCharm调试命令行脚本

在许多情况下,编写Python脚本是从OS Shell运行并从用户那里获取命令行选项。可以将这些类型的脚本加载到Python控制台中,但是大多数脚本都需要一些小的技巧才能运行。但是,如果您只想调试这样的脚本,则无需弄乱控制台。

PyCharm支持像其他脚本一样按原样运行它们(Eclipse和其他IDE也是如此)。只需为项目创建运行/调试配置即可。我刚刚安装了PyCharm,并尝试了一下以记录详细信息。简单的任务。

只需在PyCharm中打开项目,然后在工具栏上的编辑器窗格上方,就有一个 Edit Configurations 的菜单选项。单击该按钮以打开运行/调试配置对话框,然后单击+添加配置。将出现一个带有预定义模板的小对话框-选择Python作为模板并接受。

然后在主对话框中,在脚本路径:中输入 train.py 的路径(或其他脚本),然后单击复选框 [ x]在输出控制台中仿真终端此外,您可以在 Parameters:文本框中添加命令行选项(我在文本中输入mymodel mytask只是为了满足脚本对两个参数的需求) 。单击底部的确定接受配置并关闭对话框。

现在,您应该在工具栏上看到一个绿色的bug图标。在脚本的__main__块中设置一个断点,然后单击debug图标开始调试脚本。那应该做!

使用PDB调试Python命令行脚本

PDB-Python调试器可以在没有IDE的情况下运行。这是调试各种脚本的另一种方法。如果需要命令行参数,请在启动调试器时从OS Shell提供它们:

$ pdb myscript.py mymodel mytask

这实际上就是启动调试会话的全部。 PDB需要一些基于文本的命令的知识。开始会话后,您可以输入l来获得当前执行行附近的代码清单。输入help以查看命令列表。

要单步执行,请输入“ s”作为步,或输入“ step”。要设置断点,请输入break <line-number>,或在表达式上设置断点。有关可用命令的参考,请参见:https://docs.python.org/2/library/pdb.html。在线也有很多版本的pdb速查表-仅在Google的“ pdb速查表”中选择一个即可。