2

我有一个 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)

argsparse_args()from返回的对象ArgumentParserargs.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从脚本打印?

4

1 回答 1

2

您传递给的第一个参数os.execl(在script参数之后)是正在运行的程序的“名称”(它可以是任何东西,不必是可执行文件的实际路径)。这就是它的样子script.pysys.argv[0]参见文档,还有这个问题,例如,解释如何argv[0]工作)。

文档

argv[0] 是脚本名称(取决于操作系统是否为完整路径名)

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

os.execl(args.script, args.script, *args.script_argument)
于 2014-04-04T17:10:06.310 回答