在子进程中调用包装器脚本

时间:2013-04-23 07:08:22

标签: python linux shell python-2.7 subprocess

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

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

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

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

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

编辑:

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

1 个答案:

答案 0 :(得分:1)

环境path是一个复杂的概念,所有内容共享“基数”path,但您也可以在特定流程中临时修改或附加path。这意味着,如果您修改脚本中的path,然后调用subprocesssubprocess将不会与父脚本具有相同的path

除非您执行以下操作:

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

在此告诉subprocess使用您当前的环境,其中包含您当前的path


注意:如果您希望subprocess使用修改过的env,但不是同一个。你可以这样做:

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