我正在使用Popen,因为我需要env,像这样:
Popen(
["boto-rsync", "..."],
env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"},
)
问题是Popen
会将命令作为新线程运行。有没有办法可以将env
传递给subprocess.call
或者防止Popen
创建新线程?
我正在使用Popen,因为我需要env,像这样:
Popen(
["boto-rsync", "..."],
env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"},
)
问题是Popen
会将命令作为新线程运行。有没有办法可以将env
传递给subprocess.call
或者防止Popen
创建新线程?
您可以像使用popen
一样,在调用中使用env
:
subprocess.call(
["boto-rsync", "..."],
env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"},
)
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
中的小星号。 - Colin D Bennettsubprocess.call(cmd)
只是 subprocess.Popen(cmd).wait()
的简写,也就是说,你可以将所有传递给 Popen()
的参数都传递给 call()
。 - jfs
Popen()
不会创建新的线程(它会创建一个新的进程)。 - jfsenv
会替换当前环境。如果你只想修改它,请先创建一个副本:new_env = dict(os.environ); new_env['PATH'] = path; Popen(args, env=new_env)
。 - Flimm