2

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

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

当我调用上面的脚本时,它不会将任何参数传递给wrapperexec. 但是当我改为:

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

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

编辑:

抱歉,我在创建此问题时完全走错了轨道。现在更新到真正的问题。

4

1 回答 1

1

环境path是一个复杂的概念,有path万物共享的“基础”,但您也可以path在特定的过程中临时修改或附加。这意味着如果您修改path脚本中的 ,然后调用 a subprocess,则subprocesspath与父脚本不同。

除非您执行以下操作:

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

在这里,您要告诉subprocess使用您当前的环境,其中将包括您当前的path.


注意:如果您想subprocess使用修改后的环境,但不是您拥有的环境。你可以这样做:

env = os.environ.copy()
env['PATH'] += ';/dirB'
subprocess.check_call(["nonsystemexec"], shell=True, cwd="/dirA", env=env)
于 2013-04-23T07:22:22.653 回答