在子stream程中调用包装脚本

我有一个wrapperexec ,它应该调用exec和一些参数。

 subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=True, cwd="/dirA" ) 

当我调用上面的脚本时,它不传递任何参数给wrapperexec 。 但是当我改变到:

 subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=False, cwd="/dirA" ) 

它确实按预期传递了参数。 有人可以向我解释,为什么前者不行?

编辑:

对不起,我在创build这个问题时是完全错误的。 现在更新到真正的问题。

环境path是一个复杂的概念,所有东西都有“基础” path ,但也可以在特定的过程中临时修改或附加path 。 这意味着如果您修改脚本中的path ,但是调用subprocess ,则subprocess将不具有与父脚本相同的path

除非你做到以下几点:

 subprocess.check_call(["nonsystemexec"], shell=True, cwd="/dirA", env=os.environ) 

这里你告诉subprocess使用你当前的env,它将包含你当前的path


注意:如果你想让subprocess使用一个修改的env,但是不是你所拥有的。 你可以做这样的事情:

 env = os.environ.copy() env['PATH'] += ';/dirB' subprocess.check_call(["nonsystemexec"], shell=True, cwd="/dirA", env=env)