首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么python的Popen无法在Mac OS X上传递环境变量?

在Mac OS X上,Python的Popen无法直接传递环境变量的原因是Mac OS X的系统限制。Mac OS X采用了基于Mach内核的操作系统,其进程间通信方式与其他操作系统有所不同。

在Mac OS X上,每个进程都有自己的独立环境变量,而Popen创建的子进程无法直接继承父进程的环境变量。这是由于Mac OS X采用了基于Mach内核的进程间通信方式,子进程是通过fork和exec来创建的,而不是像其他操作系统一样通过复制父进程的内存空间。

为了解决这个问题,可以使用subprocess模块的env参数来传递环境变量。通过将环境变量以字典的形式传递给env参数,可以在Popen创建的子进程中设置相应的环境变量。

以下是一个示例代码:

代码语言:txt
复制
import subprocess

env = {'MY_VARIABLE': 'my_value'}
process = subprocess.Popen(['command'], env=env)

在这个示例中,我们通过将环境变量以字典的形式传递给env参数,将MY_VARIABLE设置为my_value。这样,在Popen创建的子进程中,就可以通过os.environ['MY_VARIABLE']来获取该环境变量的值。

需要注意的是,由于Mac OS X的系统限制,无法直接在Popen创建的子进程中修改父进程的环境变量。因此,如果需要在子进程中修改环境变量,可以通过在子进程中执行shell命令来实现。

希望这个解答对您有帮助!如果您对其他问题有任何疑问,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

pyinstaller打包成无控制台程序时运行出错(与popen冲突解决方法)

有一天,我把使用了os.popen方法python程序用pyinstaller打包成exe(用了无控制台打包参数-w) 双击运行时程序却弹框报错! ?...经过研究,结论: os.popen 会打开一个管道执行命令,而管道是有输入(stdin)、输出(stdout) !...os.popen 实际是一个简单封装,我们先来看他原型:subprocess.popen subprocess.Popen( args, bufsize=0, executable=None...注意,即使你只env里定义了某一个环境变量值,也会阻止子程序得到其他父进程环境变量(也就是说,如果env里只有1项,那么子进程环境变量就 只有1个了)。...现在回到我们将要解决问题 已知: 用pyinstaller-w参数打包导致python无法处理输入值(stdin) os.popen 打开管道却需要处理输入值(stdin) 所以,我们不使用os.popen

3.8K30
  • python之调用系统命令 原

    一、python中执行cmd 目前我使用到python中执行cmd方式有三种 使用os.system("cmd") 该方法调用完shell脚本后,返回一个16位二进制数,低位为杀死所调用脚本信号号码...>>> 3 这是最简单一种方法,特点是执行时候程序会打出cmdlinux执行信息。...Popen方法不会打印出cmdlinux执行信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen, PIPE。...如果将参数shell设为 True,executable将指定程序使用shell。windows平台下,默认shell由COMSPEC环境变量来指定。...参数startupinfo与createionflags只windows下用效,它们将被传递给底层CreateProcess()函数,用 于设置子进程一些属性,如:主窗口外观,进程优先级等等。

    2.2K40

    pythonsubprocess模块

    1 os与commands模块 ​ 2 subprocess模块 ​ 3 subprocess.Popen类 我们几乎可以在任何操作系统通过命令行指令与操作系统进行交互,比如Linux平台下shell...另外,commands模块实际也是通过对os.popen()封装来完成。...说明: Python 3.5之后版本中,官方文档中提倡通过subprocess.run()函数替代其他函数来使用 ​ ​subproccess模块功能; ​ Python 3.5之前版本中,我们可以通过...需要说明是,该方法python3.x中才有。 call()方法启动进程,其标准输入输出会绑定到父进程输入和输出。调用程序无法获取命令输出结果。...下面我们来做个总结: 首先应该知道是,Python2.4版本引入了subprocess模块用来替换os.system()、os.popen()、os.spawn*()等函数以及commands模块;也就是说如果你使用

    3K20

    Python模块学习:subprocess模块详解

    说明:1.Python 3.5之后版本中,官方文档中提倡通过subprocess.run()函数替代其他函数来使用subproccess模块功能;2.Python 3.5之前版本中,我们可以通过...当然,python本身也提供了许多类似shell特性实现,如glob、fnmatch、os.walk()、os.path.expandvars()、os.expanduser()和shutil等。...('ls -l /test')>>> print(retcode)2>>> print(output)ls: 无法访问/test: 没有那个文件或目录二.subprocess.Popen介绍该类用于一个新进程中执行一个子程序...startupinfo和creationflags: 这两个参数只Windows下有效,它们将被传递给底层CreateProcess()函数,用于设置子进程一些属性,如主窗口外观,进程优先级等。...下面我们来做个总结:首先应该知道是,Python2.4版本引入了subprocess模块用来替换os.system()、os.popen()、os.spawn*()等函数以及commands模块;也就是说如果你使用

    68340

    【愚公系列】2021年12月 Python教学课程 26-系统编程

    使用 os 模块: import os 使用 os 模块时候,如果出现了问题,会抛出 OSError 异常,表明无效路径名或 文件名,或者路径名(文件名)无法访问,或者当前操作系统不支持该操作等...os.environ 获取系统环境变量 os.sep 当前平台路径分隔符。 windows 下,为‘\’, POSIX 系统中,为‘/’。...os.pathsep PATH 环境变量分隔符, POSIX 系统中为‘:’, Windows 中为‘;’。 os.linesep 行结束符。...os.devnull 不同系统 null 设备路径, Windows 下为‘nul’, POSIX 下为‘/dev/null’。...object at 0x0000000002B17668> Popen 对象 stdin、stdout 和 stderr 是三个文件句柄,可以像文件那样进行读写操作。

    88320

    Python用subprocessPopen来调用系统命令

    当我们须要调用系统命令时候,最先考虑os模块。用os.system()和os.popen()来进行操作。...windows操作系统Popen通过调用 CreateProcess()来创建子进程,CreateProcess接收一个字符串參数,假设args是序列类型,系统将会通过 list2cmdline(...假设将參数shell设为 True,executable将指定程序使用shell。windows平台下,默认shell由COMSPEC环境变量来指定。...參数env是字典类型,用于指定子进程环境变量。假设env = None,子进程环境变量将从父进程中继承。 參数Universal_newlines:不同操作系统下,文本换行符是不一样。...异常对象中,包 括进程returncode信息。 subprocess模块内容就这么多。Python手冊中,还介绍了怎样使用 subprocess来替换一些老模块,老函数样例。

    1.8K20

    python之系统命令

    可以执行shell命令相关模块和函数有: os.system os.spawn* os.popen* --废弃 popen2.* --废弃 commands.*...(callable object),它将在子进程运行之前被调用 close_sfs:windows平台下,如果close_fds被设置为True,则新创建子进程将不会继承父进程输入、输出、错误管道...shell:同上 cwd:用于设置子进程的当前目录 env:用于指定子进程环境变量。如果env = None,子进程环境变量将从父进程中继承。...universal_newlines:不同系统换行符不同,True -> 同意使用 \n startupinfo与createionflags只windows下有效 将被传递给底层CreateProcess...subprocess.Popen("mkdir t2", shell=True) 终端输入命令分为两种: 输入即可得到输出,如:ifconfig 输入进行某环境,依赖再输入,如:python import

    1.1K40

    Python调用外部系统命令

    本文主要描述Python常见调用外部系统命令方法,包括os.system()、os.popen()、subprocess.Popen()等。...1、subprocess模块优先介绍subprocess模块是由于该模块可以替代旧模块方法,如os.system()、os.popen()等,推荐使用。...shell Linux:参数值为False时,Linux通过调用os.execvp执行对应程序。为Trule时,Linux直接调用系统shell来执行程序。...如果将参数shell设为 True,executable将指定程序使用shell。windows平台下,默认shell由COMSPEC环境变量来指定。...preexec_fn 只Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用cwd设置子进程当前目录env env是字典类型,用于指定子进程环境变量

    26720

    使出Python六脉神剑,让Python拥有无限扩展性

    就算Python无法实现某个功能,可以用其他语言实现,然后Python直接调用即可。...Python执行外部命令,并传递参数和接收返回值,然后做更进一步处理。...Python执行外部命令6种方法: 1. system函数 基本调用格式如下: import os os.system("some_command with args"); system函数会将命令和参数传递给系统...这么做非常好,因为您实际可以用这种方式一次运行多个命令,并设置管道和输入/输出重定向。...popen函数还有其他3种变体,它们对I/O处理略有不同。如果将所有内容都作为字符串传递,那么命令将传递到Shell程序;如果将它们作为列表传递,则无需担心转义任何内容。

    62730

    python subprocess模块

    subprocess模块 允许你生成一个或多个进程,并且可以跟它交互,并且获取返回结果,这个模块想要替换掉几个老方法: os.system os.spawn*...run()方法python3.5才有,python2.x没有,2.x用subprocess.call(),当然python3.X版本也支持call() 常见subprocess方法 subprocess.call...shell:同上 cwd:用于设置子进程的当前目录 env:用于指定子进程环境变量。如果env = None,子进程环境变量将从父进程中继承。...universal_newlines:不同系统换行符不同,True -> 同意使用 \n startupinfo与createionflags只windows下有效 将被传递给底层...:如 python 需要交互命令示例: import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE

    1K20

    Python学习之os模块及用法

    os 模块代表了程序所在操作系统,主要用于获取程序运行所在操作系统相关信息。 Python 交互式解释器中先导入 os 模块,然后输入 os....os.environ:返回在当前系统所有环境变量组成字典。 os.fsencode(filename):该函数对类路径(path-like)文件名进行编码。...一般 Windows 系统多条路径之间分隔符是英文分号(;); UNIX 及类 UNIX 系统(如 Linux、Mac os X多条路径之间分隔符是英文冒号(:)。...os.linesep:返回当前系统换行符。一般 Windows 系统换行符是“\r\n”: UNIX 系统换行符是“\n”; Mac os X 系统换行符是“\r”。...nt None yeeku 9904 12036 8 \ ; b’\x12\x1e\xcf’ 从上面的输出结果可以看出, Windows 系统 Python 导入依赖模块操作系统名称为

    2.6K40

    python中执行DOS命令3种方法小

    使用os.system("cmd") 特点是执行时候程序会打出cmdLinux执行信息。 import os os.system("ls")   2....使用Popen模块产生新process 现在大部分人都喜欢使用PopenPopen方法不会打印出cmdlinux执行信息。的确,Popen非常强大,支持多种参数和模式。...windows平台下,默认shell由COMSPEC环境变量来指定。 参数stdin, stdout, stderr分别表示程序标准输入、输出、错误句柄。...参数startupinfo与createionflags只windows下用效,它们将被传递给底层CreateProcess()函数,用 于设置子进程一些属性,如:主窗口外观,进程优先级等等。...使用commands.getstatusoutput方法 这个方法也不会打印出cmdlinux执行信息。这个方法唯一优点是,它不是一个阻塞方法。即没有Popen函数阻塞问题。

    2.2K20

    笔记 | 如何在Python下调用LinuxShell命令?

    阅读大概需要5分钟 zenRRan: 昨天应导师要求,需要写很多python脚本linux下,这样就会用到如何在python下调用linux命令。 这里有篇比较全文章,推荐给大家!...这些方法适用于子进程中调用外部程序情况,因为外部程序会替换当前进程代码,不会返回。...而且popen还有三个变种都是I/O处理上有轻微不同。假如你通过一个字符串传递所有东西,你命令会传递给shell;如果你通过一个列表传递他们,你不用担心逃避任何事。 4.3....它基本就像Popen类并都使用相同参数,但是它只简单等待命令完成并给你返回代码。...方法 [6] http://docs.python.org/lib/os-newstreams.html -- ospopen方法 [7] http://docs.python.org/lib/

    4.6K20

    Python自动化开发学习1-2

    sys 模块 import sys print(sys.path)  # 打印环境变量 结果输出是一串目录列表,是python运行环境变量Python导入时候会依次在这些目录中查找。...,仅仅只屏幕输出反馈,没有记录,所以我们也无法根于反馈信息做任何处理。...os.popen是将执行反馈都保存下来了,但是并不能直接输出,输出应该是内存地址。上面还用了read方法才将里面的内容取了出来。...os.mkdir("目录名")还可以创建目录 最后,自己写代码保存为py文件后,也可以别的地方使用import导入。注意放到环境变量目录中,或者修改环境变量(这个没讲)。...可以放到和执行文件同一个目录中,执行文件目录也环境变量中。 数据类型 数字和字符串没太大问题。数字中复数a+bj。python里用是j,以前学校里学时候用是i。

    40610

    正确使用python调用shell姿势

    python天生优势,用它来开发一些devops自动化作业是非常方便,当然linux,一般我们用shell就能写一些简单自动化脚本,但如果自动化作业复杂的话,使用shell脚本就很难搞定了,...,或者直接在linux终端上执行 python -c "import os; myCmd = 'ls '; os.system(myCmd)" 这种方式是最原始方式,能直接调用shell命令,但是没法获取输出结果...,所以仅仅适合一些简单场景 方式二: 使用os.popen方法 import osstream = os.popen('echo 123')output = stream.read()print output...,如果仔细看python方法,会发现popen还有popen2,popen3,popen4同名方法,没错就是后面的版本里面完善了linux标准输入,输出,错误等信息。...env:用于指定子进程环境变量。如果 env = None,子进程环境变量将从父进程中继承。

    7.5K20

    Python之路,Python基础篇(第

    一、Python介绍: python创始人为吉多·范罗苏姆(Guido van Rossum),俗称龟叔。圣诞节期间为打发无聊而开发得语言。...Python发展史: Python2.x 版本只支持到2020年,Python2.7是个过渡版本,Python3.x 是以后主流。建议使用Python3.x版本进行开发。...Python3.x安装路径:C:\Python35 3、配置环境变量     【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》     【第二个内容框中找到...Mac: 无需安装,自带。 三、Hello World程序,编辑之神诅咒: print("Hello World!") 指定解释器: #!...: import os os.system('df -h') #os.mkdir('luchuan') cmd_res = os.popen("df -h").read() print(cmd_res

    48210
    领券