Python os.execl()中第二个参数的用法是什么
这个问题是从中的评论中得到启发的 当我们使用Python os.execl()中第二个参数的用法是什么,python,linux,Python,Linux,这个问题是从中的评论中得到启发的 当我们使用 os.execl(sys.executable, "python", "script.py") 第二个参数对我来说似乎是多余的,有人能解释一下为什么我们需要这个参数吗?根据惯例,运行程序的第一个参数是用户输入的程序名。它不必是实际的可执行文件名,通常不是,例如,当文件位于$PATH中时 大多数shell都遵循这一约定,但在API级别上没有强制执行。在没有图形监视器和鼠标的旧时代,纯文本控制台(甚至电传打字机)
os.execl(sys.executable, "python", "script.py")
第二个参数对我来说似乎是多余的,有人能解释一下为什么我们需要这个参数吗?根据惯例,运行程序的第一个参数是用户输入的程序名。它不必是实际的可执行文件名,通常不是,例如,当文件位于
$PATH
中时
大多数shell都遵循这一约定,但在API级别上没有强制执行。在没有图形监视器和鼠标的旧时代,纯文本控制台(甚至电传打字机)是用户和操作系统之间唯一的用户界面 这种界面(命令行界面,CLI)而不是现在的GUI(图形用户界面),迫使用户编写命令,包括启动可执行文件的命令,而不是单击它们的图标 (目前大多数操作系统仍有这种可能性,例如Windows中的命令行窗口或PowerShell,或GNU/Linux中的控制台/终端窗口。) 启动程序的命令行有一个表单
program argument1 argument2 ...
其中,program
(在过去,只有“程序”和“程序员”,没有“应用程序”和“开发人员”)是可执行文件的名称,通常包括相对/绝对路径
操作系统启动了程序
,不仅将参数(argument1
,argument2
,…)传递给它,而且将-作为所谓的第0个参数,程序本身也传递给它。
(与键入的格式相同,即有或没有路径,有或没有后缀/扩展名。)
因此,启动的程序可能会发现,它是如何启动的。它可能将此信息用于各种目的,例如
- 禁止使用另一个名称()启动它-因此,如果重命名了可执行文件,则会带来厄运
- 为了达到与启动名称相关的不同行为(某些可执行文件安装了具有不同名称的软链接)
- 用于从路径导出帮助器/用户文件的位置(如果在命令中显式使用)
许多当代程序(哦,不,应用程序)仍然可以利用带有参数的CLI启动它们,但是(大部分)忽略了程序的名称
例如,在Windows中,您可以使用以下命令
notepad somename.txt
python somescript.py
python /somefolder/somescript.py xxx 7
使用已打开的somename.txt
文件启动记事本。或者,为了不走得太远,Python可以使用以下命令启动脚本
notepad somename.txt
python somescript.py
python /somefolder/somescript.py xxx 7
回到主要问题:
os.execl()
函数模拟从CLI启动应用程序的行为,允许(此函数的)用户根据需要指定程序。它是os.execl()
函数的第二个参数。正如我提到的,一些(主要是旧的)程序的行为依赖于它
增编:
Python在其sys.argv
中列出了所有命令行参数,包括其sys.argv[0]
元素中的第0个参数
但是请注意,如果您使用命令启动脚本
notepad somename.txt
python somescript.py
python /somefolder/somescript.py xxx 7
从python
本身的角度来看(我们对此不感兴趣),参数如下:
- 第0个参数是字符串
“python”
- 第一个参数是字符串
“/somefolder/somescript.py”
- 第二个参数是字符串
“xxx”
- 第三个参数是字符串
“7”
但是从somescript.py
的角度来看,即脚本将获得什么,参数是
- 第0个参数是字符串
“/somefolder/somescript.py”
-它位于sys.argv[0]
中
- 第一个参数是字符串
“xxx”
-它位于sys.argv[1]
中
- 第二个参数是字符串
“7”
——它位于sys.argv[2]
中