python - VBA shell脚本在执行前设置环境变量

标签 python vba shell ipython

我正在尝试运行一个 VBA 模块,该模块使用 shell 脚本来运行 ipython 笔记本(使用 runipy),然后再继续执行其他操作,但我的 ipython 笔记本脚本需要输入,这些输入是使用环境变量设置的。

这是我迄今为止拥有的 VBA:

rundate = Range("b1").Value
shellScript = "runipy C:\argstest.ipynb"

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

Set wshSystemEnv = wsh.Environment("SYSTEM")
wshSystemEnv("CURRWK") = rundate

如果我然后运行:

MsgBox (wshSystemEnv("CURRWK"))

结果正确:

2015-04-17

但是,如果我继续并执行我的 shell 脚本,它无法识别此变量

Set WshShellExec = wsh.exec(shellScript)
Range("a1").Value = WshShellExec.StdErr.ReadAll

告诉我,当 python 运行时,它会出现一个关键错误:

KeyError: 'CURRWK'

如果我删除 VBA 并直接从命令行运行它,我会这样做:

set CURRWK=2015-04-17
runipy C:\Python27\Programs\ipython\ACT\argstest.ipynb

如何获取在 VBA 中创建的 shell 来创建新的环境变量,以便 python 脚本在执行时可以看到它?

谢谢!

最佳答案

您是否尝试过Process而不是SYSTEM?您的 VBA 可能无权修改系统级变量。 (“但它可以在设置后读回它,”你说。确实如此,但你的脚本可能启用了注册表虚拟化。)进程最接近地模拟命令行 SET 语句,因为更改仅对于当前进程和子进程并且不会被持久化。

关于python - VBA shell脚本在执行前设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29832234/

相关文章:

linux - 将目录中的文件列表到没有文件扩展名的数组中

python - 有没有一种精确的方法来测量Python(3.7)中特定字体的文本大小?

python - Python 中的星号三角形

javascript - 仅匹配完整数字正则表达式

excel - 为什么 cells(1,1) = 500 * 100 会导致溢出,而​​ 50000*100 不会?

excel - 在 VBA 中合并多行

vba - 将单元格内的任何单词与单元格范围内的任何单词相匹配

shell - 有什么方法可以通过按组合键返回到 Fish shell 中准备输入的命令吗?

python - PySimpleGui - 获取按钮文本

shell - 在命令行上将密码传递给 curl