为什么Python Popen使用不同的executab

2024-05-16 14:36:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这台电脑上有一个有两个不同版本的程序。我不能删除旧的,因为我没有根访问权限,但是我把新的放在我的主目录的bin中(这是我的$路径中的第一件事)

我试着用Python的Popen来称呼它

Popen(['clingo'...]...)

而且效果很好

但是在调用环境变量之前,我需要设置一个环境变量,因此我将bin目录中的“clingo”重命名为“run_chingo”,并用一个脚本替换它:

^{pr2}$

当我从终端运行'clingo'时,它工作得很好,但是Python Popen调用的是旧版本(路径后面的版本)。在

我怎样才能让波本打对电话?为什么将可执行文件更改为脚本会导致Popen在其他地方搜索?在


Tags: run路径程序版本目录脚本权限bin
2条回答

疯狂的猜测是,Popen使用的路径与您的终端不同。我会检查shebang行(#!),有时人们会把env -i python放在那里,它显式地要求fro empty,即默认环境。在

注意,subprocess.call是推荐的方法,而不是直接使用Popen。在

~/bin/clingo的最顶端添加shebang#!/bin/sh,然后运行:

$ chmod +x ~/bin/clingo

使文件可执行。在

Popen()调用os.execvp()来执行程序。Its behaviour differs from your shell that emulates ^{}:如果脚本中没有shebang(!#..在顶部),那么shell会将其重新作为shell脚本运行,但是Python的os.execvp()则会在PATH中运行下一个文件。在

相关问题 更多 >