gpt4 book ai didi

python - 使用 *list 传递参数不适用于 execl

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:43 26 4
gpt4 key购买 nike

我有一个 python 脚本,它充当其他脚本的启动器。该脚本从输入参数启动脚本,以下是一些相关代码:

try:
if verbose:
print("Calling script ", args.script, " with arguments", *args.script_argument)
os.execl(args.script, *args.script_argument)
except OSError as e:
print("OSError: [Errno {0}] {1}: {2}".format(e.errno, e.strerror, args.script), file=sys.stderr)

args 是由 ArgumentParserparse_args() 返回的对象。 args.script_arguments 使用 nargs=argparse.REMAINDER 检索。

这是启动器调用的脚本:

import sys

if __name__ == '__main__':
print(sys.argv)

os.execl 调用之前的打印中,我可以看到参数已正确设置,但是脚本打印的参数较少。

例如,如果使用 ./launcher.py -v script foo bar 调用启动器

启动器将打印,Calling script script with arguments foo bar

但是,脚本会打印 ['script.py', 'bar']。为什么 foo 没有从脚本中打印出来?

最佳答案

你传递给 os.execl 的第一个参数(在 script 参数之后)是正在运行的程序的“名称”(它可以是任何东西,不是'不必是可执行文件的实际路径)。这就是 script.py 将其视为 sys.argv[0] 的内容(参见 docsthis question ,例如,解释 argv[0] 有效)。

来自docs :

argv[0] is the script name (it is operating system dependent whether this is a full pathname or not)

要获得您期望的行为,请将其命名为:

os.execl(args.script, args.script, *args.script_argument)

关于python - 使用 *list 传递参数不适用于 execl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868432/

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