【发布时间】:2011-10-30 16:37:11
【问题描述】:
我正在尝试运行 vnc 服务器,但首先我需要运行“模块加载 vnc”。
如果我在加载的 bash shell 中调用 which module,那么 not found 中的命令是 PATH 但同时它是可用的。看起来命令是内置的。
换句话说,我似乎需要一次执行两个命令module load vnc;vncserver :8080 -localhost,并且我正在编写脚本以从 python 启动它。
我用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 开头?
【问题讨论】:
-
module load vnc是否需要在与vncserver相同的shell/命令中运行?为什么需要/bin/bash?/bin/sh几乎可以肯定是/bin/bash的符号链接。 -
你需要一个shell来执行多个命令。您可以尝试
'bash -c "module load vnc; vncserver :8080 -localhost"'之类的方法,但这可能不是真正正确的方法。 -
@tripleee 这就是他所说的
shell和executable参数的作用 -
@agf 是的,但如果他需要相同的 bash,他可以使用 shell=false 并使用 bash -c '...' 作为运行的单个命令。
-
@agf,是的,它应该在同一个 shell 中运行。你是对的,/bin/sh 是 bash 的符号链接。我认为那不应该有区别。
标签: python bash subprocess environment-modules