子进程调用环境变量

19

我正在使用Popen,因为我需要env,像这样:

Popen(
    ["boto-rsync", "..."],
    env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"},
    )

问题是Popen会将命令作为新线程运行。有没有办法可以将env传递给subprocess.call或者防止Popen创建新线程?


3
请注意,Popen()不会创建新的线程(它会创建一个新的进程)。 - jfs
2
提醒一下,env 会替换当前环境。如果你只想修改它,请先创建一个副本:new_env = dict(os.environ); new_env['PATH'] = path; Popen(args, env=new_env) - Flimm
1个回答

31

您可以像使用popen一样,在调用中使用env

subprocess.call(
    ["boto-rsync", "..."],
    env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"},
    )

谢谢,我不知道为什么我没有尝试过!我想我找不到选项。 - AliBZ
5
@AliBZ 对于subprocess.call的文档在这一点上并不清楚 - 唯一表明支持其他关键字参数的指示是在subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)中的小星号。 - Colin D Bennett
3
说明一下:subprocess.call(cmd) 只是 subprocess.Popen(cmd).wait() 的简写,也就是说,你可以将所有传递给 Popen() 的参数都传递给 call() - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接