gpt4 book ai didi

python - Python 中 Bash 的 exec $@ 相当于什么?

转载 作者:行者123 更新时间:2023-12-03 03:51:01 27 4
gpt4 key购买 nike

一些 bash 脚本以 exec "$@" 结束执行,通常会调用一系列命令,然后最终用最初传递给脚本的参数替换其执行。

如果您要编写一个 Python 脚本来替换该 bash 脚本,最终的命令是什么?

最佳答案

在 bash 中,

"$@" is an array-like construct of all positional parameters, {$1, $2, $3 ...}.

参见https://stackoverflow.com/a/5163260/1420079

所以exec "$@"将调用所有附加位置参数,第一个参数是程序名称,然后后续参数是该替换程序的参数。

在Python中,sys.argv (来自 sys 模块)是...

The list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0] is the empty string.

参见https://docs.python.org/3/library/sys.html#sys.argv

将当前正在运行的进程替换为另一个进程是 os.exec* 的工作。函数系列(毫不奇怪,来自 os 模块),请参阅 https://docs.python.org/3/library/os.html#os.execvp

如果 Bash 的 exec在没有 -c 的情况下调用flag,它继承了当前进程的环境,同时也使用$PATH如果路径不是绝对路径,则用于查找要执行的程序的变量。

因此,最接近的exec*功能是 os.execvp (可变数量的参数,使用path)。另外要记住的是......

The various exec* functions take a list of arguments for the new program loaded into the process. In each case, the first of these arguments is passed to the new program as its own name rather than as an argument a user may have typed on a command line. For the C programmer, this is the argv[0] passed to a program’s main(). For example, os.execvp('/bin/echo', ['foo', 'bar']) will only print bar on standard output; foo will seem to be ignored.

<小时/>

所以,我会实现 Bash 的 exec "$@"在Python中如下(假设导入ossys):

os.execvp(sys.argv[1], sys.argv[1:])

这不是一个完美的复制,Bash 的 exec 将不处理任何参数作为无操作,而此代码将抛出 IndexError .

关于python - Python 中 Bash 的 exec $@ 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55284908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com