我试图在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'})
那么命令将只以一个环境变量开始。