【问题标题】:What is windows doing when a command like python is run in a terminal?当像 python 这样的命令在终端中运行时,windows 在做什么?
【发布时间】:2016-10-15 17:34:14
【问题描述】:

这更多是关于在 powershell 中运行命令时 windows 执行的一般过程的问题

我的理解是当命令

C:\>python

在 powershell 中运行,它引用存储在其他地方的 python 可执行文件。这个路径是在我安装 python 时为我添加的,所以我不必费心知道 python.exe(或其他任何名称)的位置。但是,python 命令也适用于脚本,因此您可以运行

C:\>python script.py

在不打开 shell 的情况下执行 python 脚本。那么它是在包含 script.py 时引用不同的可执行文件,还是它引用的 python.exe 命令能够根据执行方式执行多项操作?

【问题讨论】:

  • 你的意思是除了检查它是否传递了任何参数?
  • 因此它能够检查是否传递了任何参数。这是可执行文件本身正在做的事情,还是在添加到路径时需要包含的事情?
  • 与往常一样,路径仅适用于可执行文件。
  • 谢谢,这有助于解决我的问题。

标签: python powershell path


【解决方案1】:

如果您在 IDA Pro 或其他反汇编器或调试器中打开 python.exe,您可以跟踪执行并查看它有多个路径,具体取决于它的运行方式。

它没有引用不同的可执行文件,它正在查看它是如何执行的(它是否传递了参数?那些参数是什么?)并且这些不同的因素控制着 python.exe 的执行方式。

【讨论】:

    【解决方案2】:

    shell(不仅是 powershell,还包括 cmd.exe、bash 等)解析命令行,获取第一个令牌,尝试找到与该令牌匹配的内部命令或可执行文件,并在成功的情况下执行发现将命令行作为参数传递给它。

    在您的情况下,shell 将python script.py 拆分为['python', 'script.py'],使用 PATH 和 PATHEXT 环境变量找到c:\python27\python.exe,并使用python script.py 作为参数创建进程python.exe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 2017-08-20
      相关资源
      最近更新 更多