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