【发布时间】:2020-08-13 13:33:28
【问题描述】:
如何使用子进程运行多个命令?我想做的是使用 subprocess 模块来完成下面的 csh 脚本的等效操作。
#!/bin/csh
setenv VARIABLE value
source /folder/license_setup.rc
command -flag0 -arg0a -flag1 -arg1a
command -flag0 -arg0b -flag1 -arg1b
command -flag0 -arg0c -flag1 -arg1c
作为中间步骤,我尝试从 python 运行脚本。
import subprocess
subprocess.run(['source run.csh'], shell=True, executable='/bin/csh')
这项工作很好,但还不是我想要的。我查看了示例,我认为我需要使用 Popen 和通信,但不知道如何。我在下面写了一个天真的伪实现。有人有什么建议吗?
with subprocess.Popen(..., shell=True, executable='/bin/csh') as proc:
proc.communicate('setenv VARIABLE value')
proc.communicate('source /folder/license_setup.rc')
proc.communicate('command -flag0 -arg0a -flag1 -arg1a')
proc.communicate('command -flag0 -arg0b -flag1 -arg1b')
proc.communicate('command -flag0 -arg0c -flag1 -arg1c')
作为替代方案,我还可以生成多个 csh 脚本并分别运行它们。但是创建一堆csh脚本并调用它们似乎有点傻,而不是在python中编写脚本。
import subprocess
subprocess.run(['source runa.csh'], shell=True, executable='/bin/csh')
subprocess.run(['source runb.csh'], shell=True, executable='/bin/csh')
subprocess.run(['source runc.csh'], shell=True, executable='/bin/csh')
(顺便说一句:我想使用单独调用的原因是使用 tqdm 监视进度。我没有包含 tqdm 语句,以保持示例简短。)
【问题讨论】:
标签: python subprocess csh