我正在使用带有库“pexpect”的python3.9,并且我尝试在子进程中运行一些命令(然后等待特定结果)。 问题是我的子进程的 $PATH 与父进程不同,因此它找不到我想要使用的一些命令。 我的代码如下所示:
child = pexpect.spawn(f"foo 1 2", timeout=None)
child.expect(f"foo command ran successfully")
我可以在父进程中运行“foo”命令,但在子进程中我得到“命令未找到”。 有办法解决这个问题吗?我想我需要确保子进程具有相同的 $PATH 值,但我不确定。
您可能想使用
env
在子进程中设置环境变量。比如:
import subprocess
# you could use "foo" instead of "env", but this is more robust
cmd = ["env", "foo", "1", "2"]
subprocess.run(cmd, check=True)
我认为这成功了:
pexpect.spawn(f"foo 1 2", env=dict(os.environ), timeout=None)
您可以以交互方式运行 shell,然后
echo $PATH
。将其与在 pexpect 之外运行的另一个 shell 实例进行比较,您应该能够看到是否存在差异。