相关疑难解决方法(0)

python子进程Popen环境PATH?

我对subprocess使用时如何搜索可执行文件感到困惑Popen().如果给定子进程的绝对路径,它可以工作,但我正在尝试使用相对路径.我发现如果我设置环境变量PYTHONPATH然后我可以从该路径获得导入的模块,并且PYTHONPATH存在sys.path,但它似乎没有帮助的行为subprocess.Popen.我也尝试过编辑sitecustomize.py添加PYTHONPATH 的文件os.environ,就像这样

# copy PYTHONPATH environment variable into PATH to allow our stuff to use
# relative paths for subprocess spawning
import os
if os.getenv('PYTHONPATH') is not None and os.getenv('PATH') is not none:
    os.environ['PATH'] = ':'.join([os.getenv('PATH'), os.getenv('PYTHONPATH')])
Run Code Online (Sandbox Code Playgroud)

并且验证了在启动python时,无论是交互式地,使用ipython,还是通过从命令行运行脚本,PYTHONPATH都成功出现os.environ.但是,subrocess.Popen 仍然不在那里搜索可执行文件.如果没有env指定kwarg ,我认为它应该继承父母的环境?接下来我尝试env明确地给出,首先通过制作副本,os.getenv然后仅仅通过给予env={'PATH': '/explicit/path/to/search/from'},它仍然找不到可执行文件.现在我很难过.

希望一个例子可以帮助我更清楚地解释我的问题:

/ dir/subdir1/some_executable
/dir/subdir2/some_script.py

# some_script.py
from subprocess import Popen, PIPE
spam, eggs = Popen(['../subdir1/some_executable'], …
Run Code Online (Sandbox Code Playgroud)

python environment subprocess path popen

56
推荐指数
2
解决办法
6万
查看次数

Python:使用shell = False的子进程调用不起作用

我正在使用Python脚本来调用Java虚拟机.以下命令有效:

subprocess.call(["./rvm"], shell=False)  # works
subprocess.call(["./rvm xyz"], shell=True) # works
Run Code Online (Sandbox Code Playgroud)

但,

subprocess.call(["./rvm xyz"], shell=False) # not working
Run Code Online (Sandbox Code Playgroud)

不起作用.要避免的Python文档建议shell=True.

python shell subprocess

12
推荐指数
2
解决办法
1万
查看次数

标签 统计

python ×2

subprocess ×2

environment ×1

path ×1

popen ×1

shell ×1