我正在尝试运行vnc服务器,但为了首先运行,我需要运行'module load vnc‘。
如果我在加载的bash shell中调用which module
,那么在not found中的命令是路径,但同时它是可用的。看起来这个命令是内置的。
换句话说,看起来我需要一次执行两个命令,并且我正在编写脚本从module load vnc;vncserver :8080 -localhost
启动它。我在subprocess.Popen
上尝试过不同的变体,比如
subprocess.Popen('module load vnc;vncserver :8080 -localhost', shell=True)
返回127
退出代码或command not found
。
subprocess.Popen('module load vnc;vncserver :8080 -localhost', shell=False)
正在显示
File <path>/subprocess.py line 621, in \__init__
errread, errwrite)
OSError: [Errno 2] No such file or directory.
如果我指定shell=True
,它将从/bin/sh
执行,但我需要从/bin/bash
执行它。
指定executable='/bin/bash'
没有帮助,因为它加载新的bash shell,但它作为字符串启动,而不是作为进程,即我在ps
列表中看到与我想要启动的命令完全相同的命令。
您能建议如何从子进程模块启动此命令吗?是否可以从shell=False
开始
发布于 2011-08-19 23:23:13
环境模块通常只为你修改几个环境变量。通常可以完全跳过module load whatever
步骤,只需不依赖于这些模块。我推荐
subprocess.Popen(['/possibly/path/to/vncserver', ':8080', '-localhost'],
env={'WHATEVER': 'you', 'MAY': 'need'})
而不是完全加载模块。
如果您坚持使用这种基本方法,那么您需要开始使用Popen(['bash',...
。
发布于 2011-08-19 22:57:20
如果你想用shell=False
来做这件事,只要把它拆分为两个Popen
调用即可。
subprocess.check_call('module load vnc'.split())
subprocess.Popen('vncserver :8080 -localhost'.split())
发布于 2018-08-07 02:57:59
您可以从Python脚本调用module
。module
命令由环境模块软件提供,该软件还提供python.py
初始化脚本。
在Python脚本中计算此脚本将启用module
python函数。如果环境模块安装在/usr/share/Modules
中,您可以在/usr/share/Modules/init/python.py
中找到此脚本。
以下代码启用module
python函数:
import os
exec(open('/usr/share/Modules/init/python.py').read())
然后,您可以加载模块并启动应用程序:
module('load', 'vnc')
subprocess.Popen(['vncserver', ':8080', '-localhost'])
https://stackoverflow.com/questions/7123181
复制相似问题