我有一个wrapperexec
,应该调用exec
和一些参数。
subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=True, cwd="/dirA" )
当我调用上面的脚本时,它不会向wrapperexec
传递任何参数。
但是当我改为:
subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=False, cwd="/dirA" )
它按预期传递参数。 有人可以向我解释,为什么前者不起作用?
编辑:
抱歉,我在创建此问题时遇到了完全错误的轨道。现在更新到真正的问题。
答案 0 :(得分:1)
环境path
是一个复杂的概念,所有内容共享“基数”path
,但您也可以在特定流程中临时修改或附加path
。这意味着,如果您修改脚本中的path
,然后调用subprocess
,subprocess
将不会与父脚本具有相同的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)