我在这台电脑上有一个有两个不同版本的程序。我不能删除旧的,因为我没有根访问权限,但是我把新的放在我的主目录的bin中(这是我的$路径中的第一件事)
我试着用Python的Popen来称呼它
Popen(['clingo'...]...)
而且效果很好
但是在调用环境变量之前,我需要设置一个环境变量,因此我将bin目录中的“clingo”重命名为“run_chingo”,并用一个脚本替换它:
^{pr2}$当我从终端运行'clingo'时,它工作得很好,但是Python Popen调用的是旧版本(路径后面的版本)。在
我怎样才能让波本打对电话?为什么将可执行文件更改为脚本会导致Popen在其他地方搜索?在
疯狂的猜测是,Popen使用的路径与您的终端不同。我会检查shebang行(
#!
),有时人们会把env -i python
放在那里,它显式地要求fro empty,即默认环境。在注意,
subprocess.call
是推荐的方法,而不是直接使用Popen
。在在
~/bin/clingo
的最顶端添加shebang#!/bin/sh
,然后运行:使文件可执行。在
Popen()
调用os.execvp()
来执行程序。Its behaviour differs from your shell that emulates ^{!#..
在顶部),那么shell会将其重新作为shell脚本运行,但是Python的os.execvp()
则会在PATH中运行下一个文件。在相关问题 更多 >
编程相关推荐