gpt4 book ai didi

python - 从 python 子进程模块启动模块 shell 命令

转载 作者:行者123 更新时间:2023-12-01 06:08:10 24 4
gpt4 key购买 nike

我正在尝试运行 vnc 服务器,但为了首先执行此操作,我需要运行“模块加载 vnc”。

如果我在加载的 bash shell 中调用 which module ,则未找到的命令是 PATH,但同时它是可用的。看起来该命令是内置的。

换句话说,我看起来需要一次执行两个命令 module load vnc;vncserver :8080 -localhost 并且我正在编写脚本以从 python 启动它。我尝试了 subprocess.Popen 的不同变体,例如

subprocess.Popen('module load vnc;vncserver :8080 -localhost', shell=True) 

返回127退出代码或找不到命令

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 开头?

最佳答案

环境模块通常只为您修改几个环境变量。通常可以完全跳过模块加载任何步骤,并且不依赖于这些模块。我推荐

subprocess.Popen(['/possibly/path/to/vncserver', ':8080', '-localhost'], 
env={'WHATEVER': 'you', 'MAY': 'need'})

而不是根本加载模块。

如果您确实坚持使用这个基本方法,那么您需要使用 Popen(['bash',....

关于python - 从 python 子进程模块启动模块 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7123181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com