如何在Pexpect spawn中设置环境变量而不出现异常



我试图在expect.spawn()调用中在Ubuntu系统上设置我的HOME环境变量,但我得到了一个异常。在下面的例子:

import pexpect
pexpect.spawn('HOME=/home/myuser && <other command that pexpect is ok with>', cwd='/home/myuser/Desktop')
ExceptionPexpect:The command was not found or was not executable: HOME=/home/myuser

这似乎是pexpect/pty_spawn.py中的一个错误。对这个异常以及如何在这个上下文中解决它有什么见解吗?

我也试过在bash脚本中运行它,比如

set_home.sh
#!/bin/bash
HOME=/home/myuser
<run other command that pexpect is ok with>
pexpect.spawn('./set_home.sh')

,但然后我面临的问题是,它不持有HOME值为未来的命令,所以它不采取的效果,我需要它为下一个命令。我不确定这是否是一条更好的道路,但目前我不能让这两种方法都起作用。

这似乎是pexpect/pty_spawn.py中的错误

这是你代码中的一个错误。pexpect.spawn的文档说:

Remember that Pexpect does NOT interpret shell meta characters such as
redirect, pipe, or wild cards (``>``, ``|``, or ``*``). This is a
common mistake.  If you want to run a command and pipe it through
another command then you must also start a shell.

你正在尝试使用shell脚本语法(VAR=value command ...),但pexpect.spawn不使用壳。

如果您想为使用pexpect.spawn运行的命令设置一个环境变量,只需使用env参数:

import os
import pexpect
pexpect.spawn('<other command that pexpect is ok with>', 
cwd='/home/myuser/Desktop', 
env=os.environ | {'HOME': '/home/myuser'})

上面的示例假设Python 3.9或更高版本将HOME的值添加到现有环境中。如果我们写成:

pexpect.spawn('<other command that pexpect is ok with>', 
cwd='/home/myuser/Desktop', 
env={'HOME': '/home/myuser'})

那么命令将只以一个环境变量开始。

相关内容

  • 没有找到相关文章

最新更新