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

标签 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" )

它确实按预期传递参数。 谁能给我解释一下,为什么前者不起作用?

编辑:

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

最佳答案

环境path是个复杂的概念,有万物共享的“基础”path,但也可以临时修改或追加path 在特定进程中。这意味着如果您修改脚本中的 path,然后调用 subprocesssubprocess 将不会有相同的 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/

相关文章:

python - 创建数据框时动态转换类型

python - 我如何测试字符串中的不同字符串并对其中的某些字符串采取不同的操作? Python

Python yield 和 return 语句?和 Scrapy 产生请求

ruby - Rails 服务器无法启动

shell - 获取两个参数之间的内容,参数在一个文件中多次出现

java - 如何在java中初始化变量时返回对象?

c++ - 如何使用g++编译一个VC项目?

c - 在服务器上监听 2 个套接字

shell - (Shell函数)VBA中需要文件路径吗?

linux - 使用 shell 脚本杀死 vim 进程会留下 .swp 文件