原作:

BRETT CANNON

译者:豌豆花下猫@Python猫

英文:

https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the-terminal

为了我们推出的 VS Code 的 Python 插件[1],我写了一个简单的脚本来生成变更日志[2](类似于Towncrier[3],但简单些,支持 Markdown,符合我们的需求)。在发布过程中,有一个步骤是运行python news,它会将 Python 指向我们代码中的"news"目录。

前几天,一位合作者问这是如何工作的,似乎我们团队中的每个人都知道如何使用-m?请参阅我的有关带 -m 使用 pip 的文章[4],了解原因。

这使我意识到其他人可能不知道有五花八门的方法可以将 Python 指向要执行的代码,因此有了这篇文章。

1、通过标准输入和管道

因为如何用管道传东西给一个进程是属于 shell 的内容,我不打算深入解释。毋庸置疑,你可以将代码传递到 Python 中。

#管道传内容给 python

echo "print('hi')" | python

如果将文件重定向到 Python,这显然也可以。

#重定向一个文件给 python

python

归功于 Python 的 UNIX 传统,这些都不太令人感到意外。

2、通过 -c 指定的字符串

如果你只需要快速地检查某些内容,则可以在命令行中将代码作为字符串传递。

# 使用 python 的 -c 参数

python -c "print('hi')"

当需要检查仅一行或两行代码时,我个人会使用它,而不是启动 REPL(译注:Read Eval Print Loop,即交互式解释器,例如在 windows 控制台中输入python, 就会进入交互式解释器。-c 参数用法可以省去进入解释器界面的过程)

3、文件的路径

最众所周知的传代码给 python 的方法很可能是通过文件路径。

# 指定 python 的文件路径

python spam.py

要实现这一点的关键是将包含该文件的目录放到sys.path里。这样你的所有导入都可以继续使用。但这也是为什么你不能/不应该传入包含在一个包里的模块路径。因为sys.path可能不包含该包的目录,因此所有的导入将相对于与你预期的包不同的目录。

4、对包使用 -m

执行 Python 包的正确方法是使用 -m 并指定要运行的包名。

python -m spam

它在底层使用了runpy[5]。要在你的项目中做到这点,只需要在包里指定一个__main__.py文件,它将被当成__main__执行。而且子模块可以像任何其它模块一样导入,因此你可以对其进行各种测试。

我知道有些人喜欢在一个包里写一个main子模块,然后将其__main__.py写成:

from . import main

if __name__ == "__main__":

main.main()

就我个人而言,我不感冒于单独的main模块,而是直接将所有相关的代码放入__main__.py,因为我感觉这些模块名是多余的。

(译注:即作者不关心作为入口文件的"main"或者“__main__”模块,因为执行时只需用它们的包名即可。我认为这也暗示了入口模块不该再被其它模块 import。我上篇文章[6]比作者的观点激进,认为连那句 if 语句都不该写。)

5、目录

定义__main__.py也可以扩展到目录。如果你看一下促成此博客文章的示例,python news可执行,就是因为 news 目录有一个 __main__.py 文件。该目录就像一个文件路径被 Python 执行了。

现在你可能会问:“为什么不直接指定文件路径呢?”好吧,坦白说,关于文件路径,有件事得说清楚。

python花猫_涨见识了,在终端执行 Python 代码的 6 种方式!相关推荐

  1. Pycharm中运行Python代码的几种方式

    Pycharm中运行Python代码的几种方式 在pycharm中的Python代码运行会出现各种奇葩的问题,比如,密码输入时不显示或没有提示,给我们带来一些麻烦,下面介绍几种代码运行的几种方式: 一 ...

  2. python交互式方式、代码文件方式_涨见识了,在终端执行 Python 代码的 6 种方式

    原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...

  3. 执行python代码的方式_涨见识了,在终端执行 Python 代码的 6 种方式!

    译者:豌豆花下猫@Python猫 为了我们推出的 VS Code 的 Python 插件 [1],我写了一个简单的脚本来生成变更日志 [2](类似于Towncrier [3],但简单些,支持 Mark ...

  4. 清华大学python视频_涨见识了,清华大学全套Python579集视频教程泄露,拿走学去吧...

    Python是世界上功能最多,功能最强大的编程语言之一.通过Python,可以编写自己的应用程序,创建游戏,设计算法,甚至编程机器人.而且Python的热度现在一直高居不下,比如,完成同一个任务,C语 ...

  5. 清华大学python视频_涨见识了,清华大学全套Python642集视频教程泄露,拿走玩去...

    Python是世界上功能最多,功能最强大的编程语言之一.通过Python,可以编写自己的应用程序,创建游戏,设计算法,甚至编程机器人.而且Python的热度现在一直高居不下,比如,完成同一个任务,C语 ...

  6. 涨见识了,在终端执行 Python 代码的 6 种方式

    作者 | BRETT CANNON 译者 | 豌豆花下猫@Python猫 为了我们推出的 VS Code 的 Python 插件[1],我写了一个简单的脚本来生成变更日志[2](类似于Towncrie ...

  7. 海龟python编程猫_海龟编辑器官方下载|编程猫海龟编辑器 V1.3.5 最新免费版 下载_当下软件园_软件下载...

    海龟编辑器是由编程猫开发的面向少儿的Python编辑器,该编辑器可以让孩子们以搭积木的方式来学习Python,提高孩子的学习兴趣,降低学习难度,它的扩展功能强大,支持硬件编程,可以一键安装第三方库. ...

  8. python 编程效率_如何有效提升数据分析效率?五大Python技巧

    如何有效提升数据分析效率?相信这是所有数据分析工作者都想解决的问题.本文整理了五大python技巧,分别是Pandas Profiling:使用 Cufflinks 和 Plotly 绘制 Panda ...

  9. python ide 最好_我在iPad上最好的Python IDE

    python ide 最好 Having finished my first year at university, and being left with very little to do thi ...

最新文章

  1. 如何撰写好一篇论文?密歇根Andrew教授这篇《撰写高影响力论文指南》为你细致讲解论文写作,附视频与pdf...
  2. flask mysql项目模板渲染_[Flask] Flask问题集(后端模板渲染项目)
  3. 财富第三极人类社会运行模型(附路线图)
  4. 惠普刀片服务器c7000硬件配置手册_刀片服务器四点不足之处你都知道几个?
  5. 通俗理解Spring的IOC和AOP
  6. 【HTTPS运维神器】终于等到你!MySSL企业版重磅上线!
  7. 【Python】基于Python的百度迁徙1——迁入、迁出数据(附代码)
  8. 《编程珠玑》---笔记。浏览此文,一窥此书。
  9. redis3.0源码学习之可持久化化操作
  10. 将路由器作为AP来使用
  11. 12C ORA-错误汇总20
  12. 《C++ Primer 第5版》-11.4无序容器-康奈尔笔记
  13. 2022危险化学品经营单位安全管理人员考试题库模拟考试平台操作
  14. 高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制)
  15. caffe 搭建参数服务器(1)—— 用MPI实现多节点同时训练一个模型
  16. 材料研发转行,转什么比较好
  17. 富春山居图的幽默犀利台词
  18. 战地4修改的服务器地址,战地4服务器区域设置
  19. Google奥运会logo
  20. java中JAO_JVM内部细节之一:synchronized关键字及实现细节(轻量级锁Lightweight Locking)...

热门文章

  1. AutoInteger中的incrementAndGet 和 getAndIncrement
  2. deepstream视频数据流分析工具包安装使用教程
  3. ubuntu关机或重启出现memtest
  4. htc+m7+android系统+电源,htc one m7 4.4系统获取root权限教程(安卓4.4专用)
  5. 【代码大全2】第33章 个人性格
  6. 有一天我们可不可以这样相爱……
  7. 撩妹方式,你值得拥有!!
  8. Keil AC5/Keil AC6/IAR指定数据绝对存储地址
  9. Stochastic Computing + Quantization
  10. Python基础速成笔记(1)(适合有C/C++的基础)