想在python脚本里面source .profile,调用os.system后在当前运行的脚本里环境变量没有变呢?求解决方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想在python脚本里面source .profile,调用os.system后在当前运行的脚本里环境变量没有变呢?求解决方法。相关的知识,希望对你有一定的参考价值。

因为你调用os.system执行source .profile命令是在子进程中进行的,不能改变python当前进程的环境变量。

你应该修改os.environ。
一个mapping对象表示环境。例如,os.environ['HOME'] ,表示的你自己home文件夹的路径(某些平台支持,windows不支持)
,它与C中的getenv("HOME")一致。
参考技术A 在Python中环境变量的正确获取方法应该是os.environ返回的是个dict类型的数据 参考技术B source is not an executable command, it's a shell builtin.
The most usual case for using source is to run a shell script that changes the environment and to retain that environment in the current shell. That's exactly how virtualenv works to modify the default python environment.
Creating a sub-process and using source in the subprocess probably won't do anything useful, it won't modify the environment of the parent process, none of the side-effects of using the sourced script will take place.
Python has an analogous command, execfile, which runs the specified file using the current python global namespace (or another, if you supply one), that you could use in a similar way as the bash command source.
https://stackoverflow.com/questions/7040592/calling-the-source-command-from-subprocess-popen

如何从 python 脚本调用 *.jsl 脚本

【中文标题】如何从 python 脚本调用 *.jsl 脚本【英文标题】:How to call a *.jsl script from python script 【发布时间】:2013-07-29 18:27:15 【问题描述】:

我有一个 python 脚本正在运行。我想在我正在运行的 python 脚本中调用 *.jsl 脚本,并想在 python 中使用它的输出。我可以知道我该怎么做吗?

【问题讨论】:

什么是 jmp 脚本? (您使用的标签似乎完全适用于 ASM 指令......)(不管它是什么,您可能想查看 subprocess 模块)。 @Wooble:谢谢你的纠正 【参考方案1】:

你应该看看JMP automation guide。

您可以使用win32com 接口从 Python 自动化 JMP,但不幸的是,该接口有很多错误且不完整。我编写了一个自定义代码库来解决这些问题,主要是因为我的工作需要我广泛使用 JMP,而它的内置 jsl 编程语言在很多方面都很糟糕。

【讨论】:

【参考方案2】:

确保 jmp.exe 在您的系统环境中可用,这样如果您在命令行中键入“jmp.exe”,它将启动 jmp。然后准备好你的 *.jsl。 使用 python procees 运行此命令“jmp.exe *.jsl”,这将打开 jmp 并运行 *.jsl 脚本,然后您可以将您从 jmp 生成的任何内容导入回 python。

【讨论】:

【参考方案3】:

我在 Mac 上,这行得通

import os
os.system('open /Applications/JMP\ Pro\ 13.app/Contents/MacOS/JMP /path/filename.jsl')

路径/可执行文件和路径/名称之间有一个空格。

在你的 JSL 中确保第一行只有 //! 这将使脚本在打开时自动运行。 另外,使用quit(); 作为最后一行,这样打开的 JMP 实例就会关闭。

使用操作系统参考此链接:How can I launch an instance of an application using Python?

【讨论】:

以上是关于想在python脚本里面source .profile,调用os.system后在当前运行的脚本里环境变量没有变呢?求解决方法。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Elastic Beanstalk 上启动时运行一次 python 脚本

源码包安装(Python mysql redis)

PHP缓存加速器

linux里面的命令:./和. /(这里有空格)的区别

我的第一个python脚本

linux中环境变量总是失效,需要每次source问题