我有一个 wrapperexec
,它应该调用 exec
和一些参数。
subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=True, cwd="/dirA" )
当我调用上面的脚本时,它没有将参数传递给 wrapperexec
。
但是当我更改为:
subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=False, cwd="/dirA" )
它确实按预期传递参数。 谁能给我解释一下,为什么前者不起作用?
编辑:
抱歉,我在创建此问题时完全走错了路。现在更新到真正的问题。
最佳答案
环境path
是个复杂的概念,有万物共享的“基础”path
,但也可以临时修改或追加path
在特定进程中。这意味着如果您修改脚本中的 path
,然后调用 subprocess
,subprocess
将不会有相同的 path
作为父脚本。
除非您执行以下操作:
subprocess.check_call(["nonsystemexec"], shell=True, cwd="/dirA", env=os.environ)
在这里,您告诉 subprocess
使用您当前的环境,其中将包括您当前的路径
。
注意:如果您想让 subprocess
使用修改后的环境,但与您拥有的环境不同。你可以这样做:
env = os.environ.copy()
env['PATH'] += ';/dirB'
subprocess.check_call(["nonsystemexec"], shell=True, cwd="/dirA", env=env)
关于python - 在子进程中调用包装器脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16163070/